Wenn Sie in einer sicherheitsrelevanten Umgebung arbeiten, lesen Sie dies bitte durch.
Bitte vertrauen Sie niemals einer Eigenschaft, die Sie über das System#getProperty(String)Unterprogramm erhalten haben! Eigentlich fast jedes Eigentum , einschließlich os.arch, os.nameund os.versionist nicht nur lesbar , wie Sie vielleicht erwarten würde - stattdessen sind sie eigentlich ganz im Gegenteil.
Zunächst kann jeder Code mit ausreichender Berechtigung zum Aufrufen der System#setProperty(String, String)Unterroutine das zurückgegebene Literal nach Belieben ändern. Dies ist hier jedoch nicht unbedingt das Hauptproblem, da es durch die Verwendung eines so genannten Problems gelöst werden kann SecurityManager, wie hier ausführlicher beschrieben .
Das eigentliche Problem ist, dass jeder Benutzer diese Eigenschaften bearbeiten kann, wenn er die JARbetreffende Funktion ausführt. Dies bedeutet, dass es keine Möglichkeit gibt , festzustellen, ob diese Eigenschaften tatsächlich korrekt sind. Aus diesem Grund finden Sie hier einige zusätzliche Überprüfungen, um Manipulationen zu vermeiden:
// The first thing we're able to do is to query the filesystem.
switch (java.io.File.separator)
{
case "/":
// Windows is a potential candidate.
break;
case "\\":
// And here it could really be anything else.
break;
default:
// There's probably something really wrong here by now.
break;
}
Eine weitere gute Idee ist es, das Vorhandensein betriebssystemspezifischer Verzeichnisse zu überprüfen. Denken Sie bei jedem Ansatz daran, dass die Java- Sprache als plattformübergreifende Einheit eingerückt ist. Warum versuchst du nicht das Gleiche zu tun?
Windows 10undos.namegebe mir dochWindows 8.1. Warum ist das so? Woher kommt das?