Anzeige:
Ergebnis 1 bis 6 von 6

Thema: addslashes, htmlentities, etc

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.05.2010
    Beiträge
    93

    addslashes, htmlentities, etc

    Hallo,
    diese Frage betrifft PHP denke ich genauso wie SQL.

    Ich habe einen Blog geschrieben, in dem die Einträge mittels PHP in eine SLQ-Datenbank gschrieben werden. Damit keiner irgendwelchen Code (schadhafte SQL-Befehle, Skripte, etc.) über einen Eintrag in die Datenbank schreiben kann, habe ich den Eintrag per addslashes und htmlentities "abgesichert". Beim Ausgeben des Eintrags entferne ich per stripslashes die vorher eingefügten Schrägstriche wieder.
    Außerdem habe ich ein Formular gebaut, indem eine URL und eine Beschreibung eingeben werden können. Per PHP füge ich beides zu einem html-link (<a href...) zusammen, und schreibe es in die Datenbank. Beim Ausgeben erscheint ein anklickbarer Link. Hier habe ich nur addslashes benutzt, da das ganze bei html entities nicht funktioniert ;-).

    Jetzt meine Frage: Ist es sinnvoll, was ich gemacht habe oder fehlt etwas? Bin Anfänger und hab mir das ganze mehr oder weniger selber beigebracht...

  2. #2
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    hallo,

    zuerst einmal addslahes und stripslashes würde ich nicht verwenden.
    die meistne datenbanken bieten eine eigene funktion für sowas an,
    verwende stattdessen diese. mysql zB mysql_real_escape_string
    andere DBMS bieten auch gleich funktionen an, um daten von der query
    zu trennen (auch viele dbms abstraktionen machen das) zB
    PHP-Code:
    $db->query('insert into tb(field) values( ? )', array( $data ) ); 
    ich empehle dir eine dieser varianten und natürlich magic_quote abstellen wenn das noch aktiv sein sollte (ist eh veraltet)

    htmlentities natürlich vor der ausgabe im html benutzen, also entweder vor
    dem speichern in der db oder aber bei der ausgabe vor der ausgabe (so mach ich das lieber).

    wenn du addslashes und htmlentities verwendest auf jedenfall zuerst htmlentities und dann addslashes! da sonst der string kaputt gehen kann.


    zu dem link: den link einfach in das href=" einzubauen ist sehr gefährlich, da haset du gleich eine XSS lücke drinnen. Besorg dir lieber einen reg. Ausdruckder nach einer validen Url überprüft (sonst kann auch jemand JS einschmuggeln) da findes tdu bei google sehr viel: http://www.google.de/search?hl=de&q=reg+expr+valid+uri

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.05.2010
    Beiträge
    93
    danke, für die schnelle antwort, soo viel ;-)

    die addslashes und stripslashes hab ich entfernt. dann habe ich die mysql_real_escape_string-methode beim schreiben in die datenbank eingebaut, beim auslesen brauche ich das nicht, oder? Das sieht bei mir jetzt ungefähr so aus:
    Code:
    mysql_query(sprintf('insert into blog (name,eintrag) VALUES ("%s","%s")',
    $daten["name"]),
    mysql_real_escape_string(htmlentities($daten["eintrag"])),
    Sollte ich das mit dem mysql_real_escape_string bei JEDEM eingetragenen wert machen? Im moment habe ich das nur beim eintrag selber, aber ich trage auch noch namen, datum und zeit ein. (hab beim googeln gesehn, dass es teilweise bei jedem feld gemacht wurde).

    das mit dem htmlentities habe ich nicht verstanden, aber man sieht ja oben, wie ich es gemacht habe. ist das so gut?

    wie stelle ich das magic_quote ab? habe beim googeln so viel gefunden, aber ich verstehe das nicht so ganz. alles, worum es hier geht ist mit .htacces abgesichert (ist es wichtig das zu wissen?)

    Mit dem Link hab ich jetzt gar nicht verstanden :-O. Das ich den Ausdruck nicht auf einen "richtigen" link validiere, das weiß ich, mein problem ist im moment eher, dass ich es sicher bauen will, damit da keiner schabernack treiben kann..

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.05.2010
    Beiträge
    93
    ach, jetzt hab ich das mit dem link glaub ich verstanden ;-)
    soll ich prüfen, ob das eingegebene eine url ist, und dann erst in die datennbank schreiben?

  5. #5
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    wenn du dir unsicher bist ob du die datne mit mysql_real_esacpe_string in die db schreiben sollst, verwende es, denn es schadet in keinem fall!
    das feld $daten["name"] solltest du also auch mit mysql_real_escape_string behandeln!

    warum htmlentities? trag doch mal als name das ein:

    HTML-Code:
    mein Name</div></div></div><h1>HAHA</h1>
    und schau was auf deiner seite passiert, wenn es beim nächsten im browser angezeigt wird!

    und ja den url natürlich auch testen, denn was passiert wenn jemand das als url einträgt:

    HTML-Code:
    "><script>location.href="http://www.heise.de"</script>
    teste das doch mal

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.05.2010
    Beiträge
    93
    :-O

    danke für die eindrucksvolle Vorführung ;-)
    hab das natürlich mal getestet, und war schockiert, wie einfach man zu manipulieren ist.
    Habe grad schon nen validator im internet gefunden den ich verstehe, den baue ich jetzt sofort erstmal ein!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •