Ich höre diese Frage oft, wenn ich mit einem Java-Entwickler diskutiere. Sie (Java-Entwickler) fragen immer, ob Ihre Sprachwahl Sicherheit hat und ich weiß nicht, was ich darauf antworten soll. Könnte mir bitte jemand sagen, was Java-Sicherheit bedeutet?
Antworten
Zu viele Anzeigen?Schnell gesagt: In Java können Sie auf unterschiedliche Arten von "Sicherheit" stoßen (wobei diesem Wort eine breitere Interpretation gegeben wird).
- Sicherheit auf JVM-Ebene (d.h. zwischen zwei Apps in derselben JVM)
- Sicherheit auf Container-Ebene (zwischen zwei in derselben Appserver bereitgestellten WAR-Dateien und der Fähigkeit des Containers, Aufrufe von einem nicht autorisierten Client zu blockieren)
- Sicherheit auf Anwendungsebene (was wahrscheinlicherweise Authentifizierungs- und Autorisierungssysteme sind, die im Allgemeinen die Verwendung von Frameworks implizieren)
Aber ich denke nicht, dass es sinnvoll ist zu fragen, ob "Die Sprache X Sicherheit hat", ohne etwas mehr Kontext.
Java erlaubt keinen Zugriff auf das zugrunde liegende System, daher bieten die Abstraktionen Schutz vor (zum Beispiel) Pufferüberläufen im Speicher. Mit einer nativen Sprache können Sie auf Ihr System zugreifen und mehr Funktionen nutzen, aber möglicherweise Fehler einführen, die Angreifern die volle Systemkontrolle geben.
Zusätzlich gibt es eine Sandbox für Applets und Webstart-Anwendungen, die es Website-Besitzern verhindert, auf persönliche Daten zuzugreifen oder die Kontrolle über Ihren Desktop zu übernehmen.
Nun, wie von ccheneson hervorgehoben, könnten sie viele Dinge bedeuten:
- API für sichere Kommunikation (Kryptographie, Datenverschlüsselung für die Netzwerkübertragung, digitale Prüfsummen)
- Sicherheit innerhalb der Sprache, wie Schutz vor Entwicklerfehlern wie Pufferüberläufen
- Sicherheit in der VM, wie ein Sandbox-Modell zum Ausführen von Code mit eingeschränkten Rechten
Sagen Sie ihnen also einfach, dass ihre Frage zu allgemein ist, um eine aussagekräftige Antwort zu geben. Sie versuchen möglicherweise nur, Sie zu beeindrucken...
Sagen Sie Ihren Java-Entwicklern, dass Sprachen keine 'Sicherheit haben'. Die Plattform (Bibliotheken und Frameworks) kann API's anbieten, die zur Verbesserung der Sicherheit genutzt werden können (oder falsch angewendet oder verwendet werden, um Dinge unnötig komplex zu machen, was die Sicherheit immer verringert).
Anwendungen und die Art und Weise, wie sie bereitgestellt und betrieben werden, können sicher sein oder nicht, unabhängig von der verwendeten Sprache oder Plattform. Sicherheit ist eine Qualitätsmerkmal, genauso wie Leistung oder Wartbarkeit. Programmiersprachen sind ein geringer Aspekt davon; Plattform-APIs ein etwas größerer Aspekt, aber kein Unterscheidungsmerkmal zwischen den meisten großen Mainstream-Plattformen.
Ich vermute, dass die Java-Entwickler, mit denen du sprichst, hauptsächlich an Dinge wie die automatische Überprüfung von Array- und String-Grenzen denken - die in Low-Level-Sprachen wie C und Assembler nicht vorhanden sind und die zu sehr häufigen Programmierfehlern führen, die extrem ernste Sicherheitslücken verursachen.
Es ist wahr, dass Java's Design diese Art von Fehler fast vollständig verhindert, da es automatisch Array-Grenzen überprüft. Aber das bedeutet nicht, dass "Java sicher ist" - viele andere Arten von Angriffen wie Cross-Site-Scripting und SQL-Injection sind immer noch möglich, und viele schlecht geschriebene Java-Apps sind anfällig dafür.
Und das trifft auch auf so ziemlich alle anderen modernen Hochsprachen zu. Javas "Sicherheit" gegen Buffer Overflows war ein wichtiger Fortschritt (und wurde bei der Markteinführung in den mittleren 1990er Jahren stark betont), als C++ sein Hauptkonkurrent war. Heutzutage, mit vielen anderen Sprachen im weit verbreiteten Einsatz, ist das nicht mehr so wichtig.
- See previous answers
- Weitere Antworten anzeigen