PHP sqlinjections vermeiden

07/03/2013 02:15 tolio#1
jo ich bin zZ wieder nen bischen mit PHP am basteln und da wollte ich mal fragen ob folgende Methode reicht um angriffe mit "falschen" eingaben zu verhindern:


PHP Code:
function noSpecialChars($input)
{
    if (
preg_match('/[^a-zA-Z0-9]+/'$input$matches)) {
        return 
false;
    }else {
        return 
true;
    }


jede eingabe wird neben isset auch hier durchgejagt und es wird nur der eigendliche code ausgeführt wenn bei alle sachen true rauskommt, reicht das?
07/03/2013 08:25 Masterakio1995#2
Sollte eigentlich reichen.
07/03/2013 08:27 InstantBlood#3
Naja, ich empfehle dir in deinen Querys den mysql_real_escape_string() Tag zu benutzen.
07/03/2013 16:25 tolio#4
da aber sonderzeichen in den eingaben eh nicht benötigt werden hab ich mich gegen die escape string methode entschieden und mache es direkt über regex, naja mir ist auch nichts eingefallen wie man dran vorbei kommen könnte, ich denke es reicht so ^^
07/06/2013 10:38 Sedrika#5
Das reicht vollkommen, wenn du wirklich bei jeder eingabe "a-z A-Z 0-9" zu lassen willst.
07/06/2013 12:42 Gotoxy#6
Eine Injection wäre ja schon

PHP Code:
$QUERY_STRING "' OR 1"
Daher sollte tolios script das schoneinmal abdecken da es dem "standart" script sehr änhlich ist und daher auch gehen sollte :o
07/07/2013 14:37 NotEnoughForYou#7
oder einfach gleich pdo und prepared statements nutzen
07/07/2013 23:01 MrSm!th#8
Ähm, ich kann mich täuschen, aber die Funktion gibt doch auch true zurück, wenn zwar Sonderzeichen enthalten sind, aber auch mindestens ein normales. Immerhin müsste preg_match dann ja trotzdem den akzeptierten Teil matchen.

Es gibt doch in RegExps auch Metazeichen, die Anfang und Ende eines Strings symbolisieren. Die würde ich an Anfang und Ende platzieren, damit eben nur akzeptierte Zeichen und weder etwas davor noch etwas dahinter im String sind.
07/08/2013 00:43 tolio#9
die funktion gibt false zurück wenn etwas gefunden wurde was nicht a-zA-Z0-9 ist; ^ ist negierung
07/08/2013 07:42 MrSm!th#10
Oh völlig übersehen.