Ausgaben gegen Cross-Site-Scripting sichern
Diese Anleitung setzt die einfache Installation von SSEQ-LIB auf dem Server voraus.
Die Funktion aus der SSEQ-LIB-Bibliothek gegen Cross-Site-Scripting ist die: SEQ_OUTPUT().
Beispiele der Verwendung in eine Webapplikation:
<br />
<?php
// einfache Ausgabe
echo "Hallo " . SEQ_OUTPUT($username) . "!";
?></p>
<p>// einbinden in ein Formular<br />
<input type="text" name="username" value="echo SEQ_OUTPUT($username); ?>„></p>
<p>// erzeugen eines Links<br />
<a href="index.php?action=echo SEQ_OUTPUT($_GET['action']); ?>„> LINK </a><br />
Das Verwenden von SEQ_OUTPUT bei der Ausgabe von Datenbankinhalten schützt besonders gegen das „reflexive“ Coss-Site-Scripting.
(Codebeispiel von schattenbaum.de mit beispielhafter Anpassung)
<br />
<?php
$abfrage = "SELECT url, urlname FROM links";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo SEQ_OUTPUT($row->url);<br />
}<br />
?><br />
Hallo Erich,
bekanntlich sollte man ja $_SERVER[„php_self“] nicht in einem Formular als „action“.
Kann ich dies dennoch einsetzen sobald ich Dein SEQ_OUTPUT() verwende?
Also: <form action=““ method=“POST“>
[Erich:] Korrektur:
Also: <form action=“<?php echo SEQ_OUTPUT($_SERVER[„php_self“]); ?>“ method=“POST“>
Viele Grüße
Peter
@Peter
SEQ_OUTPUT kodiert auch das den SLASH „/“ – das wird also nicht funktionieren. Verwende stattdessen htmlentities(), an dieser Stelle reicht es aus.
Benutzt man SEQ_OUTPUT, um etwa eine Telefonnummer auszugeben, die folgendes Format besitzt:
(+49)0123/456789
…“frißt“ SEQ_OUTPUT das „+49“ in der Klammer. Ergebnis:
()0123/456789
Ergänzung zum ersten Kommentar: Diese Zeile „entfernt“ das +49:
$string = mb_convert_encoding($string_, „UTF-8“, „7bit, UTF-7, UTF-8, UTF-16, ISO-8859-1, ASCII“);