reg-ex mit und-Verknüpfung
romy
- programmiertechnik
0 Eidgenosse0 romy
0 Christian Kruse0 romy
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
Hallo Romy,
meinst Du vielleicht etwas in der Art
"\bdrop\b|\binsert\b|\bupdate\b|\bdelete\b|\bselect\b|"|'"
Gruß
Eidgenosse
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
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
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
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
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
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