La risposta semplice è che non è possibile ottenere il parametro in una forma diversa da String. Almeno, non usando le API standard del servlet. Ma ci sono un paio di possibili "uscite".
Se siete preparati per ottenere veramente brutto, è possibile infatti rompere l'astrazione dell'oggetto String, e raggiungere in e sovrascrivere i caratteri. (Le stringhe sono effettivamente modificabili se si è pronti a violare le regole. Questa è una delle poche situazioni in cui ciò potrebbe essere giustificato)
Potrebbe esserci un'estensione API non standard nell'implementazione del contenitore Web di (diciamo) HttpServletRequest
per farlo. In caso contrario, potresti essere in grado di ottenere il codice sorgente e aggiungerne uno. (Supponendo che si sta utilizzando un web container open-source.)
Detto questo, IMO l'approccio "No Strings" per la sicurezza Java è sbagliata, o per lo meno sopravvalutato in termini di ciò che raggiunge.
L'approccio "senza stringhe" impedisce la possibilità che qualcosa possa attraversare lo spazio degli indirizzi dell'applicazione, individuare elementi simili a stringhe e individuare possibili password. In teoria, questo potrebbe essere fatto da:
- un hack che rompe modello di esecuzione della JVM e guarda al ricordo grezzo,
- collegare un debugger Java e pesca a strascico attraverso gli oggetti raggiungibili,
- utilizzando "/ dev/mem" o simili per leggere la memoria processo dall'esterno,
- accedere ai resti di immagine di scambio di un programma sul disco rigido, o
- qualche facendolo core dump e leggendo la discarica.
Tuttavia, tutto tranne il primo di questi richiede che il malintenzionato abbia già infranto la sicurezza del sistema. E se il cattivo ha fatto questo ci sono altri (probabilmente più semplici) modi per rubare le password dal tuo programma ... che l'approccio "senza stringhe" non impedirà.
E se sei preoccupato per un hack che sfrutta un difetto di sicurezza di Java per leggere la memoria grezza, quel difetto potrebbe probabilmente essere utilizzato in altri modi; per esempio. iniettare il codice per modificare il modo in cui le password vengono gestite dal codice.
Quindi, in sintesi, "no string" protegge sia contro gli hack veramente difficili, sia contro i casi in cui la sicurezza è già esplosa. IMO, non ne vale la pena ... a meno che non si sia richiesto per implementare la sicurezza di livello militare.
fonte
2013-02-22 03:48:32
Isnt tutto 1s e 0s .. Come è una stringa più di una minaccia alla sicurezza di un byte []? – smk
@smk: Perché 'String's può essere internato, il che significa che rimangono nella memoria molto tempo dopo averli usati. –
@smk Le stringhe sono immutabili. Una volta che ne hai uno, si blocca in memoria fino a quando non viene raccolto nella spazzatura (molto tempo dopo aver finito con esso). Con un 'byte []', una volta terminato, è possibile sovrascrivere il contenuto per impedire la lettura dei dati. – cheeken