kostenloser Webspace werbefrei: lima-city


PHP, MySQL-Sicherheit von Nutzereingaben (Text, Url)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    esadat

    esadat hat kostenlosen Webspace.

    Hallo zusammen,

    ich habe da eine Frage bezüglich der Sicherheit von übergebenen Userwerten nach PHP, MySQL:

    Ich will dem Nutzer eine Möglichkeit geben Freitexte zu posten und habe mich über PHP, MySQL-Sicherheit informiert. Nun versuche ich Usereingaben (Freitexte) folgendermaßen zu validieren:

    $text=htmlentities($_POST['text]');
    ...
    //Verbindung zur Datenbank
    //Lange Worte werden gekürzt nach z.B. 40 Zeichen ein Leerzeichen einfügen
    ...
    $text=mysql_real_escape_string($text);
    ...
    //$text in MySQL-Datenbank speichern ... freitext='$text'...
    ...
    //Verbindung beenden


    Ist diese Methode wirklich sicher gegen Angriffe auf das System oder die Webseite?

    Außerdem will ich auch bestimmte URL's der User zulassen (Facebook und Youtube) und in der Datenbank speichern:

    $url=$_POST['url'];


    Dafür kann ich o.g. Methode nicht verwenden, da hierdurch die Url geslasht wird. Ich dachte mir, dass ich folgende Überprüfung anwenden kann:

    1.) Prüfen ob die Url den richtigen Anfang hat (z.B. http://www.facebook, oder www.youtube...)
    2.) Prüfen ob andere Zeichen außer, /, :, -, Zahlen und Buchstaben vorhanden sind, ansonsten Fehlermeldung
    3.) bei Youtube relative einfach, da hier eine bestimmte Syntax eingehalten werden muss (watch?v=)

    Oder kennt Ihr eine einfachere Alternative um URL in MySQL sicher zu speichern?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Könntest ja zuerst mit filter_var prüfen, ob es eine gültige URL ist und dann mit parse_url auf die Bestandteile prüfen, ob da alles nötige vorhanden richtig ist.

    Ansonsten sollte man das alles auch mit einem Regex lösen können.
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Es wäre besse, wenn du das etwas anders lösen würdest: beim Eintragen in die DB nur
    mysql_real_escape_string()
    anwenden, damit kann keine SQL-Injection mehr durchgeführt werden, und erst bei der Ausgabe die
    htmlentities()
    , denn so kannst du die Daten später ohne einer Änderung an der Datenbank auch auf andere Weise nutzen.

    Die URL bei Links solltest du vor dem Eintragen in die DB mittels
    mysql_real_escape_string()
    sichern, aber du solltest zusätzlich prüfen, ob es sich um einen gültigen Link handelt. Dies lässt sich mit einem regulären Ausdruck erledigen… auch wichtig ist, dass keine Links auf private Adressen möglich sind (z.B. http://localhost/ oder http://192.168.0.1/), weil dadurch eventuell Schaden angerichtet werden könnte, wenn jemand auf so einen Link klickt.

    Wenn du bei der Ausgabe der Links wieder
    htmlspecialchars()
    nutzt kommt sogar immer valides HTML heraus ;-)
  5. Es wäre zudem sicher, wenn man mit preg_match oder strpos feststellt, ob der User
    SQL gepostet hat und dann den Beitrag nicht posten bzw. den SQL-Query nicht ausführen.
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    cubenet schrieb:
    Es wäre zudem sicher, wenn man mit preg_match oder strpos feststellt, ob der User
    SQL gepostet hat und dann den Beitrag nicht posten bzw. den SQL-Query nicht ausführen.
    Was wird dadurch sicherer, wenn der Text bereits mittels
    mysql_real_escape_string()
    escaped wurde? Stell dir ein System wie lima-city vor bei dem du keine Posts abschicken könntest, die SQL enthalten… das ginge am Sinn vorbei, weil SQL genauso zu einem Beitrag gehören könnte.

    Anstatt irgendwelche Texte (SQL-Anweisungen) zu verbieten solltest du den Text lieber richtig escapen! Natürlich darf dann an keiner Stelle irgend ein Fehler sein, durch den Text ungesichert "entweichen" könnte.
  7. 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!