Regulärer Ausdruck für eine Webadresse
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausdruck
behandeln
code
datenbank
eintragen
falle
filter
frage
funktion
http
injektion
input
kommentar
methode
nutz
problem
string
umsteigen
url
verhindern
-
Hallo!
So aus Jucks wollte ich mal einen URL-Shortener schreiben und dann vielleicht ein Tutorial dazu in das Forum stellen. Ich bin fast fertig, aber ich hab noch ein Problem: Ich möchte die Adresse, die der Nutzer eingibt, auf die die ShortUrl zeigen soll in die MySQL-Datenbank eintragen, ohne eine SQL-Injection zu ermöglichen.
Meine Idee war es, das Problem mit einem regulärem Ausdruck zu regeln. Der erste Ansatz ist der hier:
^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$
Das hab ich mir teilweise selbst zusammengebastelt, teilweise habe ich http://regexlib.com/Search.aspx?k=url&AspxAutoDetectCookieSupport=1 genutzt.
Mein Problem ist aber, dass dieser Ausdruck nicht für alle URLs gültig ist.
Eine Subdomain, wie zum Beispiel http://simon-d.lima-city.de würde nicht durchgelassen werden.
Könntet ihr mir da helfen? Ich kenne mich auch nicht besonders gut mit RegEx aus.
MfG. Simon D.
PS: Vielleicht ist es auch anders zu lösen?? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Darf man fragen, warum du nicht einfach einen PHP Filter nutzt?
In dem Falle FILTER_VALIDATE_URL
Deine Methode ist wohl mehr als umständlich :D
Um Injections zu verhindern, User Input immer mit real_escape_strings behandeln.
Da du vermutlich mit MySQL (ohne i) arbeitest also in deinem Fall, bei aktiver Datenbankverbindung.
mysql_real_escape_string($variable)
Beitrag zuletzt geändert: 15.3.2014 15:24:02 von ra1n -
Hallo!
Erst einmal, ra1n, habe ich die Punkte, die du aufgezählt hast, bereits vor dem Schreiben des Threads durchdacht und verworfen.
ra1n schrieb:
Darf man fragen, warum du nicht einfach einen PHP Filter nutzt?
In dem Falle FILTER_VALIDATE_URL
Deine Methode ist wohl mehr als umständlich :D
Um Injections zu verhindern, User Input immer mit real_escape_strings behandeln.
Da du vermutlich mit MySQL (ohne i) arbeitest also in deinem Fall, bei aktiver Datenbankverbindung.
mysql_real_escape_string($variable)
So, ich nehme mal dazu Stellung:
Wenn ich die URL mit
überprüfe, kann ich mir der Sache nicht sicher sein. Lies mal dazu hier die Kommentare: http://php.net/manual/de/function.filter-var.php.filter_var($url, FILTER_VALIDATE_URL)
Mit
funktioniert es nicht, weil ja der String verändert wird und deshalb möglicherweise eine falsche Adresse aufgerufen wird. Es gibt ja keine Funktion, um das rückgängig zu machen.msqli_real_escape_string()
MfG. Simon D.
PS: Wie kommst du darauf, dass ich noch
stattmysql
nutze? Wenn du es noch nutzt, solltest du schnellstens umsteigen.mysqli
-
PS: Wie kommst du darauf, dass ich noch mysql statt mysqli nutze? Wenn du es noch nutzt, solltest du schnellstens umsteigen.
Danke für den nett gemeinten Hinweis ;), nutze schon seit Ewigkeiten MySQLi :). Dachte nur daran, da du ja in dem Segment, auch aufgrund deines Alters, noch eher als Newbie zu bezeichnen bist und die meisten Tutorials in dieser Richtung in den meisten Fällen mit MySQL arbeiten.
Zu den Kommentaren:
And this is also a valid url
http://example.com/"><script>alert(document.cookie)</script>
als auch
please note FILTER_VALIDATE_URL passes following url
http://example.ee/sdsf"f
Können beide mit htmlspecialchars() unterbunden werden.
Somit kannst du diese Strings in deine Datenbank ablegen ohne eine Injektion befürchten zu müssen, und ausgegeben wird er auch wieder richtig, fantastisch.
Und noch ein Wort zu *_real_escape_string.
Sollte diese Funktion etwas am String verändern, dann hat dieser entweder das Ziel eine Injektion vorzunehmen, oder er enthielt unzulässige Zeichen, gell? ;)
Also ist es doch sowas von egal wie dieser in der Datenbank abgelegt wird, denn er wird niemals eine richtige Seite verweisen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage