Valuta questa strategia di prevenzione dell'iniezione SQL

2

Recentemente un rappresentante di un rivenditore mi ha detto che il motivo per cui un utente non poteva accedere al proprio sito era che la password (che controllano usando una connessione LDAP al nostro server) conteneva due trattini consecutivi.

I am sorry for not getting back sooner. It turns out that the "--" in [REDACTED]'s password is causing an issue with our sanitization script ( which pulls out anything that looks like code, which could cause issues when saving it into your database table) .

Quanto ti preoccupi?

    
posta Wumpus Q. Wumbley 22.06.2017 - 19:29
fonte

1 risposta

3

Questo suggerisce che le loro pratiche di igienizzazione non sono molto mirate. In particolare, non dovresti mai dover disinfettare una password. Le password dovrebbero essere immediatamente sottoposte a hash e solo l'hash dovrebbe mai essere memorizzato. Di conseguenza, SQLi tramite il campo password dovrebbe essere impossibile.

Ora, normalmente, la difesa in profondità suggerisce di adottare ulteriori misure per la sicurezza è una buona cosa, anche se sembra ridondante. Quindi una risposta ingenua sarebbe "stanno facendo attenzione alla sicurezza qui, anche se è potenzialmente inutile, quindi qual è il problema?". Il problema è che rimuovere inutilmente i caratteri dalle password (presumendo che non abbia effettivamente infranto nulla) rende le password più deboli. Se il loro sistema ha "pulito" correttamente l'input sia quando la password è stata memorizzata, sia quando l'utente ha effettuato il login, il login funzionerebbe normalmente ma una password di "my-password" sarebbe presumibilmente diventata "mypassword" prima dell'hashing. Di conseguenza, la password pulita è più crackabile dell'originale.

L'altro problema è che il loro modo di esprimersi suggerisce che hanno uno script di disinfezione che "pulisce" tutto ciecamente. Questo è davvero il modo pigro per fare sicurezza. Ho visto molti sistemi che usano questo approccio e nella mia esperienza di solito significa che il resto della sicurezza non è davvero ben pensato.

Infine, è davvero una misura di sicurezza inutile, e i passaggi che rendono le cose belle senza migliorare la sicurezza non aiutano nessuno. Il motivo per cui stanno rimuovendo un doppio trattino è perché in SQL questo è un commento, e come risultato è a volte usato come parte di un attacco SQL Injection. Staccare i caratteri dei commenti non è un metodo molto efficace per sconfiggere detto attacco SQLi. Devono respingere tali richieste tutte insieme. Inoltre, è meglio usare correttamente le istruzioni preparate, nel qual caso eliminare due trattini è doppiamente inutile.

Non è certamente una scusa per un bug: questo significa semplicemente che non sono riusciti a implementare correttamente una funzionalità di sicurezza tutt'altro che ideale. Spero che ti abbiano fatto questo commento come "grazie per aver segnalato questo bug per poterlo aggiustare". Anche se vogliono mantenere il loro algoritmo di "pulizia", non dovrebbero rompere nulla.

    
risposta data 22.06.2017 - 19:56
fonte

Leggi altre domande sui tag