Marc: reicht HTMLENTITIES?

Hallo,
hab eigentlich ne relativ einfache Frage muss ich wenn ich daten aus meinem Gästebuch so(codeschnipsel):
mysql_query("INSERT INTO entries(name,...) VALUES('".htmlentities($_POST['a432z'])....
in meine Datenbank schreibe noch mysql_real_escape_string anwenden?? Eigentlich macht doch htmlentities schon das Ausreichende??
Ich frag nur weil ich in einem anderen Forum gelesen habe:

Unbedingt auf ALLES was vom USER in den QUERY kommt das hier anwenden:
PHP-Quellcode:
<?php
if(get_magic_quotes_gpc() == 1)
{
   $_POST['input'] = stripslashes($_POST['input']);
}
$_POST['input'] = mysql_real_escape_string($_POST['input']);
?>

MFG Marc

  1. Hallo Marc,

    hab eigentlich ne relativ einfache Frage muss ich wenn ich daten aus meinem Gästebuch so(codeschnipsel):
    mysql_query("INSERT INTO entries(name,...) VALUES('".htmlentities($_POST['a432z'])....
    in meine Datenbank schreibe noch mysql_real_escape_string anwenden??

    Ja.

    Eigentlich macht doch htmlentities schon das Ausreichende??

    Nein. htmlentities hat mit den Risiken beim Abspeichern nichts, überhaupt nichts zu tun. Wahrscheinlich hilft Dir die derzeitige Einstellung der Magic Quotes.

    Es ist meiner Meinung nach keine gute Idee, in der Datenbank etwas anderes abzuspeichern, als das, was eingegeben wurde. Es ist meiner Meinung nach viel sinnvoller, genau die Rohdaten abzuspeichern, wie im folgenden Tipp aus dem anderen Forum beschrieben. Wende htmlentities() dann und nur dann an, wenn Du die Daten in einem HTML-Kontext ausgibst.

    Ich frag nur weil ich in einem anderen Forum gelesen habe:

    Unbedingt auf ALLES was vom USER in den QUERY kommt das hier anwenden:

      
    
    > if(get_magic_quotes_gpc() == 1)  
    > {  
    >    $_POST['input'] = stripslashes($_POST['input']);  
    > }  
    > $_POST['input'] = mysql_real_escape_string($_POST['input']);
    
    

    Diesen Rat solltest Du unbedingt befolgen. Es ist ein guter Rat. Er ist sinnvoll. Du kannst Dich nicht darauf verlassen, dass magic_quotes_gpc aktiviert sind, in zukünftigen Versionen ist aus gutem Grund geplant, diesen M**t aus PHP zu entfernen.

    Freundliche Grüße

    Vinzenz

    1. Hallo,
      danke für die Antwort

      Nein. htmlentities hat mit den Risiken beim Abspeichern nichts,
      überhaupt nichts zu tun. Wahrscheinlich hilft Dir die derzeitige
      Einstellung der Magic Quotes.

      welche risiken beim abspeichern meinst du die net durch htmlentities gelöst werden?vielleicht n kleines beispiel?

      MFG Marc

      1. Moin!

        Nein. htmlentities hat mit den Risiken beim Abspeichern nichts,
        überhaupt nichts zu tun. Wahrscheinlich hilft Dir die derzeitige
        Einstellung der Magic Quotes.

        welche risiken beim abspeichern meinst du die net durch htmlentities gelöst werden?vielleicht n kleines beispiel?

        Einfache Anführungszeichen sind die bösen Elemente, die man nicht ungefiltern in SQL-Strings packen möchte. Und genau diese werden von htmlentities() überhaupt nicht bearbeitet!

        Darüber hinaus gibt es noch weitere böse Sonderzeichen, die nicht ungefiltert in den SQL-String kommen dürfen. Und die Funktion mysql_real_escape_string() weiß exakt, welche Zeichen das sind - weil sie von MySQL zur Verfügung gestellt wird, und immer exakt alle Zeichen, die in MySQL Sonderbedeutung haben, kennt und entschärft. Selbst wenn sich die Menge dieser Zeichen mal ändern sollte, durch Aktualisierungen von MySQL-Versionen, kennt die Funktion immer alle relevanten Zeichen.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Hallo Sven,
          und was ist z.Bsp wenn mir jm. das Layout zerschiesen will mit <table><td> .... oder so maskiert die Fkt. auch solche tags oder ist es dann doch sinnvoll hmtlentities zusätzlich anzuwenden,dann sicherlich erst wieder bei der ausgabe?

          Danke für eure Antworten. Langsam kommt licht ins dunkel!*G*

          MFG Marc

          1. Hallo

            und was ist z.Bsp wenn mir jm. das Layout zerschiesen will mit <table><td> .... oder so maskiert die Fkt. auch solche tags

            Nein, selbstverständlich nicht. Die Zeichenkette "<table><td>" ist für jedes mir bekannte Datenbankmanagementsystem (DBMS) völlig harmlos. Dem DBMS ist es übrigens völlig gleichgültig, wofür die Daten sind, die in ihr gespeichert werden.

            oder ist es dann doch sinnvoll hmtlentities zusätzlich anzuwenden,

            Nein. Das ist meine Meinung.

            dann sicherlich erst wieder bei der ausgabe?

            Ja. Dann und nur dann. Das ist ebenfalls meine Meinung. Wandle Daten um, bzw. maskiere sie genau dann, wenn sie Unheil anrichten könnten. Genau jetzt, genau bei der Ausgabe könnten sie Dein Layout zerschießen. Nicht beim Speichern in der Datenbank.

            Langsam kommt licht ins dunkel! *G*

            Wir betätigen uns gerne als Lichtspender :-) Nur manchem ist es nicht recht, wenn wir die dunklen Ecken in seinem Skript (seinem Projekt) erleuchten. *bg*

            Freundliche Grüße

            Vinzenz

            1. Hallo,
              gleich noch ne Frage hinterher wie sieht es mit Eingaben aus die ich in txt files speichere, die auch grundsätzlich mit addslashes maskieren???

              MFG Marc

              1. Moin!

                gleich noch ne Frage hinterher wie sieht es mit Eingaben aus die ich in txt files speichere, die auch grundsätzlich mit addslashes maskieren???

                Nein, denn in Textdateien sind grundsätzlich alle Zeichen unmaskiert erlaubt. Im Gegensatz zu SQL-Strings eben.

                - Sven Rautenberg

                --
                My sssignature, my preciousssss!