Was sind die Auswirkungen auf die Sicherheit der Verwendung von rohen Typen in Java?
-
29-09-2019 - |
Frage
Ich prüft derzeit die Auswirkungen auf die Sicherheit der verschiedenen Warnungen in einer großen Java-EE-Anwendung. Da die meisten der Code mehrere Jahre alt ist, es viele Verwendungen der rohen Sammlungstypen enthält:
List items = new List();
anstatt die parametrisierte Sammlungstypen:
List<Item> items = new List<Item>();
Die einzige Sicherheit Implikation ich denken kann, ist, dass rohe Typen können nicht statisch bei der Kompilierung geprüft typ werden und möglicherweise in einem Laufzeitfehler wie ClassCastException
führen, die, je nachdem, wo im Code dies der Fall ist, führen könnte ein Denial-of-Service.
Gibt es noch andere Auswirkungen der Verwendung rohe Arten, dass ich nicht denke an?
Lösung
Ich kann mir keine andere Auswirkungen auf die Sicherheit.
Für nicht sicherheitsrelevante Implikationen, generische Typen tun auch explizite Casts im Bytecode für Typen *, die eine generische zurückgeben. Natürlich ist dies für den Benutzer transparent, und es scheint, dass der Typ der generische Typ zurückgegeben.
Zum Beispiel:
List<Item> items = new ArrayList<Item>();
// .get(int) and remove(int) return Item automatically
* Das geschieht aufgrund Typ Löschung .
Andere Tipps
Der Mangel an Typsicherheit kann zu Sicherheitsproblemen führen. Zum Beispiel können Sie mit dieser Liste sagen wurde eine Abfrage erstellen verwendet werden:
"select name from users where id="+items[x]
Wenn Elemente einen String-Wert von union select load_file('/var/passwd')
ein Angreifer enthalten ist, könnte eine beliebige Datei auf Ihrem System lesen. Dies ist Nutzlast wird vorausgesetzt, Ihre Verwendung von MySQL. Wenn Elemente eine Liste ganzer Zahlen war, dann ist diese Abfrage auf SQL-Injection nicht anfällig.