[PHP]Problem mit preg_match

  • Hallo mcore,

    ich möchte hier einmal ein kleines problem von mir erläutern.
    Vorab:
    Ich nutze PHP 5 und 'setze' den code mit Aptana Stuido 3 'zusammen'.

    Zum problem.
    Ich habe ein Register script welches eine Option der geheimfrage beinhaltet.
    Ich habe 5 vorgegebene Fragen und auf Wunsch wird ein optionales feld namens "Eigene Frage" angezeigt.

    Wenn nun eine eigene Frage eingeben wird muss ich diese ja auf ' etc überprüfen um SQL Angriffen vorzubeugen. Ebenso die geheimfrageantwort.

    Hierzu habe ich diesen code:

    PHP
    //Variablen der Sicherheitsfrage + Antwort
    $quest_self = $_POST['input_custom_question'];
    $security_answer = $_POST['answer'];
    
    
                //Prüfen der Sicherheitsfrage und Antwort auf Sonderzeichen.
               if(!preg_match("/^[a-zA-Z0-9]+$/i", trim($quest_self)) || !preg_match("/^[a-zA-Z0-9]+$/i", trim($security_answer)))
               {
                   echo $lang['reg_security_quest'];
               }

    Hier liegt nun das problem vor, das er immer(!) die ausgabe "$lang['reg_scurity_quest']" tätigt, auch wenn die register erfolgreich war.
    Wie müsste ich also diesen code anpassen das:

    Bei eingabe der eigenen geheimfrage zeichen wie ',/ etc entfernt weredn (? sollte nicht geblockt werden) und bei der Geheimfrageantwort alle sonderzeichen entfernt weredn?

    Bitte keine unsinnigen flameposts ala "nimm google" , da ich via Google leider nichts fand was direkt (währ auch zu schön) das problem löst ;)

    Liebe Grüße,
    cross

  • ich würde es sagen per Real escape String
    das teil verschlüsselt alles was die daten bank chrashen könnte oder schaden könnte so das es keinen schaden macht

    z.b

    INSERT INTO registe
    (inhalt)
    VALUES (
    "'.mysql_real_escape_string($inhalt1).'",
    NOW());';

    da kanst man das nachlesen glaube ich wen du das meintest

    http://www.php-kurs.info/tutorial-sql_injection.html

    [CENTER][COLOR=red]Model
    mit
    Blender
    [/COLOR]
    [/CENTER]

  • danke schonmal für die antwort.
    Allerdings kann ich mysql_real_escape_string nicht nutzen da ich mit einer MSSQL datenbank arbeite :s (oben vergessen zu erwähnen sry)

    greetings

  • Hallo Cross,

    mit dieser Funktion werden alle Post und Get Anfragen gefiltert. Sollte dein Problem lösen

  • danke (:
    problem gelöst, script funzt :)

  • Zitat von ulle;228034



    Blacklists beim filtern zu benutzen ist ein bisschen idiotisch findest du nicht ulle? q.q

    Mach am besten eine Whitelist welche bestimmte Zeichen nur durchlässt. Sonst haut dir einer iwann mal einen angepassten Kodierten Shellcode um die Ohren und dein Server ist nichtmehr dein.

  • Ich finde es ja schön das du eine andere Meinung hast. Aber ausser das du ausfallend wirst hast du nichts zum Thema beigetragen. Anstatt meinen Code in Frage zu stellen poste doch einfach einen besseren. Damit ist dem Threadersteller mehr geholfen. Einfach von sich behaupten wie toll man doch sei, zeugt noch lange nicht von geistiger Reife und Qualität.

    Wie gesagt poste das Gegenstück dazu oder unterlass solche Kommentare. Denn lieber nen Blacklistfilter als gar keinen...

  • yannick: So wie du es schreibst würde mich natürlich deine intrepretation interessieren (:
    Da es sicher auch anderen helfen würde währ es vllt gut das du ein CodeBeispiel bringst ;)

    Greetings

  • Zitat von Cross;228150

    yannick: So wie du es schreibst würde mich natürlich deine intrepretation interessieren (:
    Da es sicher auch anderen helfen würde währ es vllt gut das du ein CodeBeispiel bringst ;)

    Greetings



    Mein post soll eher euch darauf bringen wie man es richtig macht.
    Man kann hier die beiden Prinzipe Blacklist und Whitelist anweden.

    Blacklist - Ihr blockiert bestimmte zeichen z.b ' und ". Diese kann man aber durch speziell kodierten Text umgehen (z.b Utf8, Hex, Ascii usw..)
    Whitelist - Ihr lässt nur bestimmte Zeichen zu! a-z, A-Z, 0-9 usw..

  • Na also dann bestätigt seine Aussage doch mein Bild von ihm. Wenn du doch ach so toll bist, dann hilf doch den anderen, anstatt hier wie ein Macho rumzutun...

  • Zitat von ulle;228204

    Na also dann bestätigt seine Aussage doch mein Bild von ihm. Wenn du doch ach so toll bist, dann hilf doch den anderen, anstatt hier wie ein Macho rumzutun...



    Wo soll ich da noch helfen? Replace einfach alle bytes die ausserhalb des Bereichs vom Alphabet sind. Danach kannst dann noch ' und " rausfiltern fertig.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!