2016-04-11 3 views
0

verwendet werden, um zu verhindern, bevor ich fragen - ich paranterised Anfragen wissen aber diese Frage ist speziell baout reguläre Ausdrücke SQL-Injection-Kann ein Regular Expression SQL Injection

Sagen wir, ich habe eine Abfragezeichenfolgeflag mit einem Paramater von q zu verhindern und ich habe einen regulären Ausdruck von ^201[0-9]Q[0-9]$, die ich gegen den Parameter ausführen, der an SQL übergeben wird.

Würde dies als Schutz ausreichen oder kann die Regex trotzdem ausgenutzt werden? Einige Pseudo-Code:

if NOT validateToken(quarter) then 
    sql = "EXEC dbo.spTest '"&quarter&"'" 
end if 

Dank

+1

Hängt davon ab, wie/wo Sie es überprüfen und wie Sie danach die Datenbank aufrufen. –

+0

Ich validiere immer Daten, bevor ich sie zum Einfügen verwende. Wenn dann alle Kriterien erfüllt sind, dann nur Daten als ein Array an meine DB-Schicht übergeben, welche Schleife durch das Array durchlaufen, und es vor dem Einfügen zu entkommen/desinfizieren. – vaso123

Antwort

0

In Ihrem Fall, ja, das Einchecken genug SQL Injection zu verhindern. Die Art der Prüfung, die Sie durchführen, ist die Art der Prüfung, die bei der Benutzereingabe erforderlich ist.

Als Faustregel sollten Sie also niemals vom Benutzer bereitgestellte Daten und SQL-Code verketten, es sei denn, Sie stellen eine umfassende Überprüfung des Inhalts der Parameter bereit.

WARTEN! Überprüfe du den Parameter in .Net oder in SQL? Wenn Sie in .Net sind, sind Sie in Sicherheit. Wenn unsicherer Code zu SQL kommt, werden Sie königlich geschraubt.

+0

Serverseitencode - nicht SQL – pee2pee