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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top