Günther S: Escaping/Unescaping und etwas mehr

Hallo zusammen,

ich wollte mal fragen, ob an dem folgenden Code-Schema soweit alles korrekt ist, bzw. ob jemand Verbesserungsvorschläge hat, ob etwas überflüssig, fehlend etc. ist.

Eine Beispiel-Anwendung wäre z.B. ein Board, bei dem man Smilies und BB-Code verwenden kann.

  
  
// Post von User in MySQL-DB speichern  
  
// Ich nehme jetzt mal hier exemplarisch nur eine Spalte 'inhalt'.  
// Eventuell durch magic_quotes hinzugefügte Slashes wurden an dieser Stelle bereits entfernt.  
  
$query = "INSERT INTO board_posts SET inhalt = '".mysql_real_escape_string($_POST['inhalt'])."'";  
  
// Query ausführen  
  
  
// Jetzt kommen zwei mögliche weitere Anwendungen: Anzeige im Forum und Bearbeiten des Posts  
  
$query = "SELECT inhalt FROM board_posts WHERE id = '...'";  
$res = mysql_query($query);  
$row = mysql_fetch_assoc($res);  
  
// Bearbeiten des Posts:  
// Inhalt holen und ohne irgend etwas zu machen, wieder in einer <textarea> anzeigen lassen:  
  
echo("<textarea>" . $row['inhalt'] . "</textarea>");  
  
// Dann zur Anzeige im Forum:  
  
$row['inhalt'] = nl2br(htmlentities(trim($row['inhalt'])));  
  
// dann werden mittels preg_replace noch BBCode ersetzt (und Smilies via str_replace)  
  

Für Verbesserungsvorschläge wäre ich jederzeit dankbar.

Grüße,
Günther

  1. hi,

    // Bearbeiten des Posts:
    // Inhalt holen und ohne irgend etwas zu machen, wieder in einer <textarea> anzeigen lassen:

    echo("<textarea>" . $row['inhalt'] . "</textarea>");

    htmlspecialchars() darauf anwenden, bevor du es als Inhalt der Textarea ausgibst.

    Sonst enthält mein Inhalt nämlich vielleicht auch mal '...</textarea>...' und ggf. auch Javascript-Code, womit XSS-Attacken möglich werden.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo wahsaga,

      htmlspecialchars() darauf anwenden, bevor du es als Inhalt der Textarea ausgibst.

      Sonst enthält mein Inhalt nämlich vielleicht auch mal '...</textarea>...' und ggf. auch Javascript-Code, womit XSS-Attacken möglich werden.

      Stimmt, das leuchtet mir ein. Sonst noch irgendwas?

      Grüße,
      Günther

  2. echo $begrüßung;

    $query = "SELECT inhalt FROM board_posts WHERE id = '...'";
    $res = mysql_query($query);
    $row = mysql_fetch_assoc($res);

    Ich vermisse hier die Fehlerbehandlung (oder einen Kommentar, dass diese absichtlich fehlt). Die meisten mysql_*-Funktionen geben im Fehlerfall false zurück, was aber kein gültiges Argument für die nachfolgenden Funktionen ist, die sich dann darüber beklagen.

    echo "$verabschiedung $name";

    1. Hallo,

      Ich vermisse hier die Fehlerbehandlung (oder einen Kommentar, dass diese absichtlich fehlt). Die meisten mysql_*-Funktionen geben im Fehlerfall false zurück, was aber kein gültiges Argument für die nachfolgenden Funktionen ist, die sich dann darüber beklagen.

      Das ist mir bekannt und auch in meiner MySQL-Klasse berücksichtigt.
      Obiges Bsp. war nur stark vereinfacht.

      Grüße,
      Günther