dedlfix: SQL-Injektionen, CrossSite Scripting, Affenformular u. Usability

Beitrag lesen

echo $begrüßung;

[...] für die HTML-Ausgabe stets korrekt kodieren, die Funktionen htmlentities() und htmlspecialcahrs() kennst du nun ja.

Bitte htmlentities() mit Vorsicht genießen. Für den HTML-Kontext ist es ausreichend, htmlspecialchars() zu verwenden. Siehe beispielsweise: </archiv/2008/1/t164688/#m1073706>

if(get_magic_quotes_gpc()) {
            $interpret        = stripslashes($_POST['interpret']);
            $album            = stripslashes($_POST['album']);
            $songtext       = stripslashes($_POST['songtext']);
        } else {
            $interpret        = $_POST['interpret'];
            $album             = $_POST['album'];
            $songtext         = $_POST['songtext'];
        }
Gut, du hast selber schon festgestellt, dass PHP ein sehr nervendes Feature names magic_quotes besitzt - zum Glück wird dieses ab PHP 6 nicht mehr existieren, deshalb ist es gut, wenn du es hier direkt richtig machst: Falls magic_quotes aktiviert war, mache es mit stripslashes() rückgängig.

Es ist besser, diese Magic-Quotes-Gegenmaßnahme einmalig am Scriptanfang auf die kompletten Eingabedaten-Arrays auszuführen. Am besten mit dem unter http://www.php.net/manual/en/security.magicquotes.disabling.php aufgeführten Beispiel. Erstens hat man damit eine bessere Trennung nach dem EVA-Prinzip, zweitens kann man seinen Quelltext beim Umstieg auf Version 6 einfacher bereinigen, wenn man nur eine Stelle zu berücksichtigen hat statt mehrerer. Außerdem kommt man so nicht auf den dummen Gedanken, für jedes $_POST['foo'] ein $foo benötigen zu müssen. Ein Magic-Quotes-bereinigtes $_POST['foo'] kann man direkt als Parameter einem mysql_real_escape_string() übergeben, ohne eine Zwischenvariable verwenden zu müssen.

Ich habe hier auch noch eine Auswertung der Rückgabe von mysql_query() eingebaut, im Fehlerfall gibt das Script die Fehlermeldung von mysql_error() aus und bricht ab. Im Produktiveinsatz ist das nicht empfehlenswert, zum Debuggen und Entwickeln aber sehr hilfreich.

Die die()-Verwendung ist wirklich nur für Beispiele geeignet. Sobald man ein Script für den Produktiveinsatz schreibt kommt man eigentlich um eine ordentliche Fehlerauswertung und -behandlung nicht umhin. Sich zunächst mit die() zufrieden zu geben, birgt die Gefahr, dass es am Ende im Code drin bleibt. Also am besten gar nicht erst das die() im eigenen Code aufnehmen und noch besser wäre, es auch aus den Beispielen zu verbannen.

if ($result = mysql_query(...)) {
    while ($row = mysql_fetch_assoc($result))
      ...
  } else {
    // Fehlerbehandlung implementieren!
    // genauer Meldungstext mit mysql_error() abfragbar
  }

Welche Art der Fehlerbehandlung angemessen ist, muss jeder selbst entscheiden, deswegen habe ich sie hier nur angedeutet statt eine der schlechtesten Varianten (die()) gleich zu implementieren.

$eintragen = mysql_query($eintrag);
  if (mysql_affected_rows($eintrag) > 0) {

mysql_query() liefert einen Erfolgsstatus zurück. Man kann ihn direkt auswerten ohne eine weitere Funktion zu bemühen, die im Fehlerfall noch nicht einmal ausgeführt werden kann, weil sie dann ein ungültigen Parameterwert übergeben bekommt. mysql_query() liefert dann nämlich false zurück, mysql_affected_rows() möchte jedoch wie so viele andere mysql_*()-Funktionen eine Ressourcenkennung haben.

echo "$verabschiedung $name";

0 59

FORM-tag behindert mein JS!

Abbadon
  • javascript
  1. 0
    ChrisB
    1. 0
      Abbadon
      1. 0
        Felix Riesterer
        1. 0
          Abbadon
          1. 0
            Felix Riesterer
            1. 0
              Abbadon
              1. 0
                Felix Riesterer
                1. 0
                  Abbadon
                  1. 0
                    Felix Riesterer
                    1. 0
                      Abbadon
                      1. 1

                        brauchbare Problembeschreibungen verfassen

                        ChrisB
                        • sonstiges
                        1. 0
                          Abbadon
                  2. 7

                    SQL-Injektionen, CrossSite Scripting, Affenformular u. Usability

                    Dennis
                    • programmiertechnik
                    1. 0
                      Abbadon
                    2. 0
                      Engin
                      1. 0
                        Abbadon
                        1. 3
                          dedlfix
                      2. 0
                        Abbadon
                        1. 0
                          ChrisB
                          1. 0
                            Abbadon
                            1. 0
                              Auge
                      3. 2
                        dedlfix
                        1. 0
                          Engin
                          1. 0
                            dedlfix
                            1. 0
                              Engin
                              1. 0
                                Dennis
                                1. 0
                                  Dennis
                                  1. 0
                                    Engin
                                    1. 1
                                      dedlfix
                                      1. 0
                                        Engin
                                        1. 0
                                          dedlfix
                                          1. 0
                                            Engin
                                            1. 0
                                              dedlfix
                                              1. 0
                                                Engin
                                                1. 0
                                                  dedlfix
                                                  1. 0
                                                    Engin
                                                    1. 0
                                                      dedlfix
                                                      1. 0
                                                        Engin
                                                        1. 0
                                                          dedlfix
                                                          1. 0
                                                            Engin
                                                            1. 0
                                                              dedlfix
                                                              1. 0
                                                                Engin
                                                                1. 0
                                                                  dedlfix
                                                                  1. 0
                                                                    Engin
                                                                    1. 0
                                                                      dedlfix
                                                                      1. 0
                                                                        Engin
                                2. 0
                                  dedlfix
                                  1. 0
                                    Struppi
                                    1. 0
                                      Christian Seiler
                                      1. 0
                                        Struppi
                                        1. 0
                                          Christian Seiler
                                      2. 0
                                        Christian Seiler
                                    2. 0
                                      dedlfix
                                      1. 0
                                        Struppi
                                        1. 0
                                          dedlfix
                                          1. 0
                                            Struppi
                                            1. 1
                                              dedlfix
                                              1. 0
                                                Struppi