Escaping/Unescaping und etwas mehr
Günther S
- php
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
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
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
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";
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