Quali sono le implicazioni di sicurezza utilizzando i tipi prime in Java?
-
29-09-2019 - |
Domanda
Al momento sto rivedendo le implicazioni di sicurezza di vari avvertimenti in una grande applicazione Java EE. Poiché la maggior parte del codice è di diversi anni, contiene molti usi dei tipi di raccolta prima:
List items = new List();
, piuttosto che i tipi di raccolta parametrizzata:
List<Item> items = new List<Item>();
L'unica implicazione di sicurezza mi viene in mente è che i tipi prime non possono essere staticamente tipo-controllati compilazione e potrebbe potenzialmente causare un errore di run-time come ClassCastException
che, a seconda di dove ciò si verifica nel codice, potrebbe portare a una negazione del servizio.
Ci sono altre implicazioni dell'utilizzo di tipi prime che non sto pensando di?
Soluzione
Non riesco a pensare a tutte le altre implicazioni di sicurezza.
Per implicazioni non di sicurezza, i tipi generici anche fare cast espliciti * nel bytecode per i tipi che restituiscono un generico. Naturalmente, questo è trasparente per l'utente, e sembra che il tipo restituito è il tipo generico.
Ad esempio:
List<Item> items = new ArrayList<Item>();
// .get(int) and remove(int) return Item automatically
* Questo accade a causa cancellazione di tipo .
Altri suggerimenti
La mancanza di sicurezza di tipo può portare a problemi di sicurezza. Per esempio consente di dire questo elenco è stato utilizzato per creare una query:
"select name from users where id="+items[x]
Se gli articoli contenevano un valore stringa di union select load_file('/var/passwd')
un utente malintenzionato di leggere un file arbitrario sul sistema. Questo è payload sta assumendo la vostra utilizzando MySQL. Se gli articoli è stato un elenco di numeri interi, allora questa query non è vulnerabile a SQL injection.