[PHP]Problem mit preg_match

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [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-Quellcode

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


      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
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Hallo Cross,

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

      PHP-Quellcode

      1. function resafe($val){
      2. $s = array("\x00", "\n", "\r", "\\", "'", "\"", "\x1a", "\"'\"", "'\"'");
      3. return str_replace($s, "", $val);
      4. }
      5. $_GET = array_map('resafe', $_GET);
      6. $_POST = array_map('resafe', $_POST);
      Alles anzeigen
    • ulle;228034 schrieb:

      PHP-Quellcode

      1. function resafe($val){
      2. $s = array("\x00", "\n", "\r", "\\", "'", "\"", "\x1a", "\"'\"", "'\"'");
      3. return str_replace($s, "", $val);
      4. }
      5. $_GET = array_map('resafe', $_GET);
      6. $_POST = array_map('resafe', $_POST);
      Alles anzeigen


      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...
    • Cross;228150 schrieb:

      @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..
    • ulle;228204 schrieb:

      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.