Andreas Cloos: wie Sicherheit eines Scriptes erhöhen

Beitrag lesen

Hallo Zusammen,

  1. HTML-Tags entfernen (strip_tags())
    Auf jeden Fall. Evntl. am Ende die Zeilenumbrüche beibehalten...

HTML-Tags _nicht zulassen_ wäre die bessere Alternative. Aber dann doch bitte nicht mit dieser überaus _dummen_ Funktion strip_tags(). Die ist nämlich so strohdumm, die löscht aus dem String alles raus, was zwischen den Zeichen "<" und ">" steht - auch wenn dazwischen absolut kein HTML-Tag steht.

Besser: Die Zeichen "<", ">" und "&" in Entities umwandeln mit htmlspecialchars(). Dann kann man diese Zeichen (und beispielsweise auch HTML-Quellcode) ins Gästebuch eintragen, ohne dass sie als HTML wirksam werden.

Habe das mal mal gegenübergestellt und mir angeguckt, was ich eher mag:

Dies hier:

<?php

$test = "<a href='http://www.gmx.de'>GMX</a>";
$test1 = $test;
echo $test;
echo "<br>";
$test = htmlspecialchars($test);
echo $test."<br>";
$test1 = strip_tags($test1);
echo $test1;

?>

führt zu:

GMX
<a href='http://www.gmx.de'>GMX</a>
GMX

Wobei das erste ein Link ist, das letzte nur Text und das zweite einfach bescheiden ausschaut, aber dafür erkennen läßt, was der Poster wollte (verlinken, ein anderes Hintergrundbild einbauen, usw...). Hm, ich weiß noch nicht genau, was mir am besten gefällt.

Als Gimmick kann man BB-Code anbieten. Christian Seiler hat dafür eine nette Klasse geschrieben: http://www.christian-seiler.de/projekte/php/bbcode/

Das schaue ich mir mal an, weiß aber nicht ob ich das will.

Wer Gästebücher fluten will, der wird nicht F5 drücken, sondern ein Skript einsetzen, was das für ihn übernimmt.

Die Weiterleitung auf eine Antwortseite ist aber dennoch gut, weil unabsichtliches Neuladen vermieden wird. Also unbedingt machen.

Also nach dem Submit auf Gültigkeit prüfen, Umwandlungen vornehmen, eintragen und sofort neuen Header senden?

Weiterhin gebe ggf. ich zum Blättern zwei Parameter in der URL mit (start und limit in der SQL-Query), sollten diese manipuliert werden, kann dann etas außer einer evtl. ungültigen Abfrage Passieren?

Aufpassen, wie diese Parameter dann in den SQL-Query gelangen. Du mußt sicherstellen, dass nur die Zahlenparameter weiterkommen, aber keinerlei Text. Eine gute Idee wäre, intern eine Konstante "Postings pro Seite" zu haben und extern nur die fortlaufende Seitennummer aufzurufen (1, 2, 3,...), welche intern dann in entsprechende LIMIT-Parameter umgesetzt werden.

Klingt nachvollziehbar und simpel. Danke soweit.

--
Greetz,
Andreas
sh:( fo:) ch:| rl:| br:> n4:# ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:<