Se lavori in un ambiente sensibile alla sicurezza, ti preghiamo di leggere questo.
Si prega di astenersi dal fidarsi mai di una proprietà ottenuta tramite la System#getProperty(String)
subroutine! In realtà, quasi tutte le proprietà os.arch
, tra cui os.name
, eos.version
non sono di sola lettura come ci si aspetterebbe - invece, sono in realtà esattamente il contrario.
Prima di tutto, qualsiasi codice con l'autorizzazione sufficiente per invocare la System#setProperty(String, String)
subroutine può modificare il valore letterale restituito a piacimento. Tuttavia, questo non è necessariamente il problema principale qui, in quanto può essere risolto mediante l'uso di un cosiddetto SecurityManager
, come descritto in maggior dettaglio qui .
Il vero problema è che qualsiasi utente è in grado di modificare queste proprietà durante l'esecuzione della JAR
domanda in questione. Ciò significa che non c'è modo di determinare se queste proprietà sono effettivamente accurate. Per questo motivo, ecco alcuni controlli aggiuntivi per cercare di evitare manomissioni:
// 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;
}
Un'altra buona idea è quella di verificare la presenza di directory specifiche del sistema operativo. Qualunque sia l'approccio che potresti adottare, ricorda che il linguaggio Java è rientrato come multipiattaforma. Quindi, perché non provi a fare lo stesso?
Windows 10
eos.name
mi dà ancoraWindows 8.1
. Perché? Da dove viene questo?