Question

J'examine actuellement les implications de sécurité des différents avertissements dans une grande application Java EE. Comme la plupart du code est de plusieurs années, il contient de nombreuses utilisations des types de collecte brute:

List items = new List();

plutôt que les types de collections paramétrisé:

List<Item> items = new List<Item>();

La seule implication de la sécurité que je peux penser est que les types bruts ne peuvent pas être de type vérifié statiquement à la compilation et pourraient entraîner une erreur d'exécution tels que ClassCastException qui, selon l'endroit où dans le code cela se produit, pourrait conduire à un déni de service.

Y a-t-il d'autres conséquences de l'utilisation de types premières que je ne pense pas à?

Était-ce utile?

La solution

Je ne peux pas penser à d'autres conséquences sur la sécurité.

Pour des conséquences non sécurité, types génériques font également des moulages explicites * dans le bytecode pour les types qui renvoient un générique. Bien sûr, cela est transparent pour l'utilisateur, et il semble que le type retourné est le type générique.

Par exemple:

List<Item> items = new ArrayList<Item>();
// .get(int) and remove(int) return Item automatically

* Cela est dû à de type effacement .

Autres conseils

Le manque de sécurité de type peut entraîner des problèmes de sécurité. Par exemple permet de dire que cette liste a été utilisée pour construire une requête:

"select name from users where id="+items[x]

Si des éléments contenaient une valeur de chaîne de union select load_file('/var/passwd') un attaquant peut lire un fichier arbitraire sur votre système. Ceci est la charge utile est en supposant que votre utilisation de MySQL. Si des éléments était une liste d'entiers, cette requête n'est pas vulnérable à l'injection sql.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top