romy: reg-ex mit und-Verknüpfung

hallöchen,

ich möchte die Inhalte meiner Formularfelder gern Serverseitig auf "böse Worte und Zeichen" überprüfen lassen
mache das immo so:
"drop|insert|update|delete|select|"|'"

das Problem dabei ist, das wenn ein User bei der Regsitrierung sich gern TillDrop (sorry, wenn ich einen Namen missbrauche,passt gerade so gut als Beispiel) nennen möchte, dann darf er es ja nicht mit dieser regex
Ich würde also gern prüfen ob diese worte im Zusammenhang mit diesen Zeichen vorkommen!

Oder sollte ich das lassen und nur auf " und ' prüfen?
was meint ihr?

danke
romy

--
DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
->Alles ist gut wenn es aus Schokolade ist
  1. Hallo Romy,

    meinst Du vielleicht etwas in der Art
    "\bdrop\b|\binsert\b|\bupdate\b|\bdelete\b|\bselect\b|"|'"

    Gruß

    Eidgenosse

    1. hallo Eidgenosse,

      meinst Du vielleicht etwas in der Art
      "\bdrop\b|\binsert\b|\bupdate\b|\bdelete\b|\bselect\b|"|'"

      danke, ich schätze ich werde Christians Lösung nehmen

      schönen Abend noch
      romy

      --
      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
      ->Alles ist gut wenn es aus Schokolade ist
  2. Hallo romy,

    [...]
    mache das immo so:
    "drop|insert|update|delete|select|"|'"

    das Problem dabei ist, das wenn ein User bei der
    Regsitrierung sich gern TillDrop (sorry, wenn ich einen
    Namen missbrauche,passt gerade so gut als Beispiel) nennen
    möchte, dann darf er es ja nicht mit dieser regex

    Dann pruef doch, ob es nur ein Teilwort oder ein ganzes Wort
    ist, z. B. so:

    (?:\b(?:drop|insert|update|delete|select)\b)|"|'

    Ansonsten sehe ich den Sinn nicht so recht. Escape die
    Strings korrekt (in Perl gibt es da DBI::quote und quotemeta,
    in PHP gibt es da mysql_quote_string, addslashes und so
    weiter), dann solltest du auch keine Probleme haben/bekommen.

    Gruesse,
     CK

    1. Hallo Christian,

      Dann pruef doch, ob es nur ein Teilwort oder ein ganzes Wort
      ist, z. B. so:

      (?:\b(?:drop|insert|update|delete|select)\b)|"|'

      <dummfrag> was ist \b </dummfrag>
      hab nur ein tolles englisches Tutoral zu regex gefunden, alles kann ich wahrscheinlich dann doch nicht lesen!? ;)

      Ansonsten sehe ich den Sinn nicht so recht. Escape die
      Strings korrekt (in Perl gibt es da DBI::quote und quotemeta,
      in PHP gibt es da mysql_quote_string, addslashes und so
      weiter), dann solltest du auch keine Probleme haben/bekommen.

      Du hast natürlich recht...(das ist mir jetzt aufgefallen, nachdem ich schon ne Seite Text geschrieben hatte, man sollte eben gleich richtig lesen)
      durch addslashes zB. sind dann demzufolge alle " und' wirkungslos!?
      Ist wahrscheinlich die bessere Variante!? Obwohl, dann lasse ich ja den Unsinn durchgehen und hätte dann vielleicht in der DB als Username:
      ";"drop dbname"; oder ähnliches
      stehen, wenn auch mit wirkungslosen Anführungszeichen,aber trotzdem Unsinn

      Wie fängst Du das ab, wenn User Unsinn in Formularfelder reinschreiben
      (manchmal auch sehr zerstörerischer Unsinn)

      danke
      liebe Grüsse
      romy

      Gruesse,
      CK

      --
      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
      ->Alles ist gut wenn es aus Schokolade ist
      1. Hallo romy,

        Bitte, bitte gewoehn dir doch mal einen besseren Quoting-Stil
        an. Es ist *so* muehsam, deine Postings zu lesen.

        <dummfrag> was ist \b </dummfrag>
        hab nur ein tolles englisches Tutoral zu regex gefunden,
        alles kann ich wahrscheinlich dann doch nicht lesen!? ;)

        \b ist ein Anker-Zeichen und bedeutet 'Wort-Anfang/Ende'.
        Will heissen, es matcht auf einen Wort-Anfang oder ein
        Wort-Ende. Was ein Wort-Anfang und was ein Wort-Ende ist,
        haengt natuerlich von den Spracheinstellungen hab.

        Du hast natürlich recht...(das ist mir jetzt aufgefallen,
        nachdem ich schon ne Seite Text geschrieben hatte, man
        sollte eben gleich richtig lesen)

        Hrhr :)

        durch addslashes zB. sind dann demzufolge alle " und'
        wirkungslos!?

        Ich wuerde nicht addslashes, sondern die Quoting-Methode
        deines DBS benutzen (in deinem Fall wohl MySQL? Dann waere
        das mysql_escape_string). Verschiedene Datenbanken escapen
        unterschiedlich -- bei PostGreSQL und DB2 z. B. werden
        Strings durch einfache (') Anfuehrungszeichen escaped, und
        einfache Anfuehrungszeichen in einem String wiederung durch
        einfache Anfuehrungszeichen: 'Dies ist ein String mit einem
        Hochkomma ('')' wuerde demnach "Dies ist ein String mit einem
        Hochkomma (')" in der C-String-Notierung ergeben. Die
        entsprechenden Methoden der DB sollten das abfangen.

        Ist wahrscheinlich die bessere Variante!?

        IMHO ja.

        Obwohl, dann lasse ich ja den Unsinn durchgehen und hätte
        dann vielleicht in der DB als Username:
        ";"drop dbname"; oder ähnliches
        stehen, wenn auch mit wirkungslosen Anführungszeichen,aber
        trotzdem Unsinn

        Na und? Ist doch das Problem des Users.

        Wie fängst Du das ab, wenn User Unsinn in Formularfelder
        reinschreiben (manchmal auch sehr zerstörerischer Unsinn)

        Ich habe eine Zahl von Validierungen, die *alle* erfolgreich
        ueber den String laufen muessen. Aber du kannst auch sowas
        wie '</input>' oder '<html><head></head></html>' in das
        Namensfeld eintragen -- warum auch nicht?

        Gruesse,
         CK

        1. Hallo romy,

          Hallo Christian,

          Bitte, bitte gewoehn dir doch mal einen besseren Quoting-Stil
          an. Es ist *so* muehsam, deine Postings zu lesen.

          okay, ich bemüh mich ja schon! ;)
          ich denke auch, das ich mittlerweise weiss was Du meinst.

          in deinem Fall wohl MySQL?

          Ich benutze PostgreSQL, der zuständige Befehl lässt sich sicher leicht finden.

          Na und? Ist doch das Problem des Users.

          auch wahr, naja mache mir wahrscheinlich manchmal zuviele Gedanken

          Gruesse,
          CK

          schönen Abend noch
          romy

          --
          DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
          ->Alles ist gut wenn es aus Schokolade ist
          1. Hallo romy,

            Bitte, bitte gewoehn dir doch mal einen besseren
            Quoting-Stil an. Es ist *so* muehsam, deine Postings zu
            lesen.
            okay, ich bemüh mich ja schon! ;)
            ich denke auch, das ich mittlerweise weiss was Du meinst.

            Ah, was fuer eine Erleichterung! Vielen dank :)

            in deinem Fall wohl MySQL?
            Ich benutze PostgreSQL, der zuständige Befehl lässt sich
            sicher leicht finden.

            Korrekt:

            http://www.php.net/manual/de/function.pg-escape-string.php

            Gruesse,
             CK