Sanitizzazione query SQL

0

Mi sembra che l'iniezione SQL possa essere evitata semplicemente convertendo tutto in una semplice codifica come base64 che non ha simboli dannosi.

Nella query classica "SELECT * FROM users WHERE username = '${username}'" , se l'utente immette, ad esempio, ' OR 1=1;-- , questo si trasformerebbe in "SELECT * FROM users WHERE username = '' OR 1=1" , e sono abbastanza sicuro che molti di voi vedranno il problema con questo.

Tuttavia, se è stata utilizzata una codifica base64 semplice, questa dovrebbe invece trasformarsi in "SELECT * FROM users WHERE username = 'JyBPUiAxPTE7LS0='" e quindi essere decodificata quando recuperata. Ciò consentirebbe anche simboli e spazi in nomi utente / password.

A meno che non stia valutando severamente qualcosa, questo sembra molto più semplice della semplice lista nera di determinate parole e simboli.

    
posta J. Doe 09.06.2018 - 03:36
fonte

1 risposta

2

This would also allow for symbols and spaces... blacklisting certain words and symbols...

Di cosa stai parlando? Quale lista nera? Dal punto di vista della sicurezza, le password possono contenere qualsiasi cosa desideri. Per impedire l'iniezione SQL, qualsiasi applicazione ragionevole utilizza istruzioni preparate : Java, C #, PHP. Nel tuo caso genererà il seguente SQL, che non restituisce alcun risultato (a meno che tu non abbia davvero un nome utente strano):

"SELECT * FROM users WHERE username = ''' OR 1=1;--'"

La blacklist di alcuni simboli viene eseguita per una migliore usabilità, non per sicurezza . In che modo gli utenti contano gli spazi, come distinguerà se ci sono 2 o 3 spazi in una sequenza? In che modo l'utente inserisce il simbolo TAB?

È stata effettuata la blacklist di alcune password come "123" o "abc" per impedire di indovinarle, per prevenire attacchi di dizionario.

    
risposta data 09.06.2018 - 14:16
fonte

Leggi altre domande sui tag