Come faccio a rendere l'iniezione SQL più difficile ma non impossibile?

6

Sto facendo un'applicazione CTF per il mio progetto dell'ultimo anno. Volevo creare un flag di iniezione SQL, ma non desidero che possano semplicemente scoprire la vulnerabilità di SQLi iniettando '. Quindi, c'è modo di rendere l'injection SQL più difficile ma non impossibile usando PHP?

    
posta ysj 23.04.2013 - 13:45
fonte

3 risposte

12

Iniezione SQL cieca è probabilmente una delle tecniche più difficili, in quanto richiede più lavoro. È possibile creare una pagina che non visualizza alcun output in base alla query, ma mostra messaggi di errore quando una query non è valida. L'utente malintenzionato sarebbe quindi costretto a utilizzare tecniche cieche SQLi per attaccarlo.

Ovviamente, uno strumento automatico lo spezzerebbe immediatamente, poiché potrebbe automatizzare l'intera iniezione. Un modo interessante sarebbe quello di avere un tipo di immagine CAPTCHA super-semplice (nessuna distorsione, solo un'immagine semplice) che l'aggressore deve risolvere per inviare una query. Ciò potrebbe costringerli a farlo manualmente o farli esaminare nelle tecniche OCR.

    
risposta data 23.04.2013 - 14:17
fonte
2

Potresti nascondere i dettagli dell'errore, il che rende più difficile per l'utente sapere che l'iniezione è possibile.

Un livello successivo sarebbe le iniezioni SQL Blind, come indicato da Polynomial.

Inoltre, è possibile riflettere l'iniezione su un'altra pagina rispetto alla pagina corrente, ad esempio una pagina di registro in modo che l'utente non riceva feedback immediato sul codice inserito.

Oppure puoi sostituire determinati caratteri nella stringa di input (vedi: Iniezione SQL: isn 't sostituire ("'", "''") abbastanza buono? ).

    
risposta data 23.04.2013 - 15:06
fonte
1

Il mio primo pensiero è di limitare quali caratteri o modelli di espressioni regolari si cercano. Potresti limitare l'uso di determinate stringhe all'interno dell'input dell'utente che consentirebbero attacchi ma complicherebbe il tipo di attacchi che potrebbero funzionare.

Direi che il modo più semplice per escogitare qualcosa di simile è probabilmente pensare a un attacco particolare a cui vuoi che arrivi qualcuno e poi tornare indietro. Prova a progettare la protezione per bloccare tutto tranne l'attacco che desideri che eseguano. Potrebbe anche essere semplice come renderla SQL Injection proof, ma in particolare consentire l'input di attacco desiderato, anche se potrebbe essere un po 'troppo complicato a seconda di ciò che stai cercando.

    
risposta data 23.04.2013 - 15:54
fonte

Leggi altre domande sui tag