prevenzione dell'iniezione SQL con lunghezza della stringa [duplicato]

3

Questo è lontano dalle migliori pratiche, ma ho appena visto un pezzo di codice che ho trovato molto interessante per non dire altro. Il codice stava eseguendo alcuni SQL e non stava usando le istruzioni preparate, quindi è completamente aperto per l'iniezione SQL.

Tuttavia, ha avuto un approccio non ortodosso a questo. È "sicuro" perché tutti i parametri di input sono limitati a 2 caratteri. E questo mi ha fatto pensare: c'è un modo in cui un aggressore può sfruttarlo? Ovviamente cambierò il codice per usare le istruzioni preparate, ma comunque, sono piuttosto curioso

    
posta munHunger 22.03.2018 - 11:39
fonte

2 risposte

1

Riduce la possibilità / l'entità del danno causato dall'iniezione SQL, ma sicuramente NON rende la tua applicazione sicura contro di essa.

Ad esempio, supponiamo che il campo contenga 2 caratteri di input e che il server esegua un'operazione LIKE sull'input. Supponiamo che l'utente inserisca qualcosa come A* , che soddisfi il limite di 2 caratteri, ma ciò si tradurrebbe in tutti i record che iniziano con il carattere A e, a seconda dello scenario, l'utente potrebbe avere accesso ai dati che non è supposto a.

Quindi, la convalida dell'input dovrebbe sempre essere eseguita immediatamente dopo aver accettato l'input, nonché prima di inviarlo all'utente.

    
risposta data 22.03.2018 - 14:17
fonte
-1

Ci sono tonnellate di risorse disponibili sulle migliori pratiche di prendere i parametri di input e non ho mai visto solo limitare la lunghezza dei caratteri come un'opzione valida o sicura. Quindi sì, un attaccante può sfruttarlo. Dopo tutto, sei già aperto all'iniezione SQL, quindi non puoi essere sicuro dei possibili attacchi e limitare la lunghezza sicuramente non ti aiuta a dormire. Di solito, se non si utilizzano le istruzioni preparate, si dispone di una whitelist di input o di un criterio specifico degli input accettati. Se l'input fornito non corrisponde, si genera un errore. Controllare la lunghezza di un input va bene, ma non dovrebbe essere l'unica difesa, ma piuttosto un vincolo aggiuntivo nell'applicazione.

Ad esempio, un utente malintenzionato potrebbe utilizzare " or ""=" come possibile attacco di iniezione. Anche se è più lungo di 2 caratteri, puoi vedere che ci sono molti modi per farlo e sono sicuro che alcuni sono 2 caratteri.

    
risposta data 22.03.2018 - 14:16
fonte

Leggi altre domande sui tag