kostenloser Webspace werbefrei: lima-city


Regulärer Ausdruck für eine Webadresse

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s*****d

    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??
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. r**n

    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
  4. Autor dieses Themas

    s*****d

    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
    filter_var($url, FILTER_VALIDATE_URL)
    ü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.
    Mit
    msqli_real_escape_string()
    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.

    MfG. Simon D.

    PS: Wie kommst du darauf, dass ich noch
    mysql
    statt
    mysqli
    nutze? Wenn du es noch nutzt, solltest du schnellstens umsteigen.
  5. r**n

    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.

  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!