Cross-Site-Scripting

El_Tomato

Erfahrenes Mitglied
Ich weiss nicht ob das hier hingehört, aber ich hab ma ne Frage.
Wie kann man Dokumente gegen Cross-Site-Scripting schützen?

mfg El_Tomato
 
Prinzipiell liegt das Problem im Nicht-Maskieren der Metazeichen, bei HTML sind das <, >, &, " und je nach Kontext auch '. Genau dafür bietet PHP die htmlspecialchars()-Funktion.
 
XSS kann auch an anderer, nicht erwarteter Stelle auftauchen. Z.B. dann, wenn man Daten ungefiltert in Fehlerbehandlungsroutinen einbaut. Als Fallbeispiel könnte sowas dienen: Du hast dir deinen eigenen Errorhandler gebaut, der Rohdaten zur Kontrolle in eine Log-Datei schreibt, welche du im Administrationsbereich auslesen willst. Schwupp - da is ein XSS, der richtig gefährlich werden kann, da man damit z.B. Session-Stealing betreiben kann.

Zugegeben, das ist etwas an den Haaren herbei gezogen, aber in den Security-Listen liest man auch ab und zu solche Dinge.
 
Wie kann ich z.B. jetzt mein Gästebuch:
eintragen.htm:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<title></title>

<style type="text/css">
body {
	background-color: #FFFFFF;
}
#Layer1 {
	position:absolute;
	left:189px;
	top:118px;
	width:131px;
	height:160px;
	z-index:1;
}
</style>

<script type="text/javascript">
var n = 1;
function add(code) {
         document.guestbook.eintrag.value += " " + code ;
}
</script>

</head>
<body>

<form action="gb.php" method="post" name="guestbook">
    <p align="center">Name: <br />                
      <input name="name" type="text" size="38">
      <br>
      E-Mail: <br />
      <input name="email" type="text" size="38">
  
  <div align="center">
  Eintrag: <br />
  <div align="center"> <img onclick="add(':lach:');" src="smileys/lach.gif" border="0" style="cursor:pointer">  <img onclick="add(':augenroll:');" src="smileys/augenroll.gif" border="0" style="cursor:pointer">  <img onclick="add(':ausruf:');" src="smileys/ausruf.gif" border="0" style="cursor:pointer">  <img onclick="add(':schaem:');" src="smileys/beschaemt.gif" border="0" style="cursor:pointer">  <img onclick="add(':boah:');" src="smileys/boah.gif" border="0" style="cursor:pointer">  <img onclick="add(':boese:');" src="smileys/boese.gif" border="0" style="cursor:pointer">  <img onclick="add(':cool:');" src="smileys/cool.gif" border="0" style="cursor:pointer">  <img onclick="add(':smileygelb:');" src="smileys/fettgelbgrins.gif" border="0" style="cursor:pointer">  <img onclick="add(':smileygruen:');" src="smileys/fettgruengrins.gif" border="0" style="cursor:pointer">  <img onclick="add(':frage:');" src="smileys/frage.gif" border="0" style="cursor:pointer">  <img onclick="add(':grins:');" src="smileys/grins.gif" border="0" style="cursor:pointer">  <img onclick="add(':heul:');" src="smileys/heul.gif" border="0" style="cursor:pointer">  <img onclick="add(':idee:');" src="smileys/lampe.gif" border="0" style="cursor:pointer">  <img onclick="add(':lol:');" src="smileys/lustig.gif" border="0" style="cursor:pointer">  <img onclick="add(':denk:');" src="smileys/nachdenklich.gif" border="0" style="cursor:pointer">  <img onclick="add(':neutral:');" src="smileys/neutal.gif" border="0" style="cursor:pointer">  <img onclick="add(':pfeil:');" src="smileys/pfeil.gif" border="0" style="cursor:pointer">  <img onclick="add(':teufel:');" src="smileys/teufel.gif" border="0" style="cursor:pointer">  <img onclick="add(':traurig:');" src="smileys/traurig.gif" border="0" style="cursor:pointer">  <img onclick="add(':ueberrascht:');" src="smileys/ueberrascht.gif" border="0" style="cursor:pointer">  <img onClick="add(':zwinker:');" src="smileys/zwinker.gif" border="0" style="cursor:pointer">  <img onClick="add(':zornig:');" src="smileys/zornig.gif" border="0" style="cursor:pointer"><br />
      <textarea name="eintrag" cols="50" rows="10"></textarea>
	  <br>
      <input type="submit" name="Button" value="Absenden">
  </div>
  </div>
</form>

<div align="center">
<div align="center">
</body>
</html>

guestbook.php:
Code:
<style type="text/css">
<!--
a:link {
	color: #000000;
}
a:visited {
	color: #000000;
}
a:hover {
	color: #000000;
}
a:active {
	color: #000000;
}
-->
</style><center> 
  <h2 align="center"><u>Gästebuch</u></h2>

  <div align="center">
    <p><a href="eintragen.htm">Ins Gästebuch eintragen</a></p>
    <p>&nbsp;</p>
  </div>
</center>

<div align="center">
 
  <?php 

$datenbank = "daten.dat"; $datei = fopen($datenbank,"r");

fpassthru($datei);

?>
</div>


gb.php:
Code:
<?php

$arr_smi = array(
            ':lach:',
            ':augenroll:',
			':ausruf:',
            ':schaem:',
            ':boah:',
            ':boese:',
            ':cool:',
            ':smileygelb:',
            ':smileygruen:',
            ':frage:',
            ':grins:',
            ':heul:',
            ':idee:',
            ':lol:',
            ':denk:',
            ':neutral:',
            ':pfeil:',
            ':teufel:',
            ':traurig:',
            ':ueberrascht:',
            ':zornig:',
            ':zwinker:'
			
        );

$arr_ima = array(
            '<img src="./smileys/lach.gif" border="0">',
            '<img src="./smileys/augenroll.gif" border="0">',
			'<img src="./smileys/ausruf.gif" border="0">',
            '<img src="./smileys/beschaemt.gif" border="0">',
            '<img src="./smileys/boah.gif" border="0">',
            '<img src="./smileys/boese.gif" border="0">',
            '<img src="./smileys/cool.gif" border="0">',
            '<img src="./smileys/fettgelbgrins.gif" border="0">',
            '<img src="./smileys/fettgruengrins.gif" border="0">',
            '<img src="./smileys/frage.gif" border="0">',
            '<img src="./smileys/grins.gif" border="0">',
            '<img src="./smileys/heul.gif" border="0">',
            '<img src="./smileys/lampe.gif" border="0">',
            '<img src="./smileys/lustig.gif" border="0">',
            '<img src="./smileys/nachdenklich.gif" border="0">',
            '<img src="./smileys/neutal.gif" border="0">',
            '<img src="./smileys/pfeil.gif" border="0">',
            '<img src="./smileys/teufel.gif" border="0">',
            '<img src="./smileys/traurig.gif" border="0">',
            '<img src="./smileys/ueberrascht.gif" border="0">',
            '<img src="./smileys/zornig.gif" border="0">',
            '<img src="./smileys/zwinker.gif" border="0">'
        );

$neu_eintrag = str_replace($arr_smi, $arr_ima, $_POST['eintrag']);

$neue_daten = $neu_eintrag . '<br>von <a href="mailto:' . $_POST['email'] . '">' . $_POST['name'] . '</a><br><br>';
$alte_daten = '';

$op = fopen('./daten.dat', 'r');

while (!feof($op))
    $alte_daten .= fgets($op, 4096);

fclose($op);

$fp = fopen('./daten.dat', 'w');
fwrite($fp, $neue_daten . $alte_daten);
fclose($fp);

?><style type="text/css">
<!--
a
{
    color: #000;
}
//-->
</style>

<div align="center">
  <p>Eintrag erfolgreich.  </p>
  <p>  <a href="guestbook.php">Zurück zum Gästebuch</a></p>
</div>

und daten.dat


gegen das scripting schützen?
 
Das kommt darauf an, wie weit du gehen willst. Du kannst z.B. alle HTML-Tags rauslöschen, bevor du mit str_replace() die Smilies einbaust. Damit wärst du schon mal ganz schön sicher. Alle Tags entfernt man mit strip_tags().
 
Ich hab jetzt aber gibt es einen Code, der Seitenzahlen einfügt wenn z.B. 5 Beiträge auf einer Seite sind?
 
Das ginge doch auch, dass man unter jeden Beitrag einen Strich zieht oder?
Den darf man aber nich im php Dokument einfügen oda?

mfg El_Tomato
 
Könnte jemand mal versuchen die Blätterfunktion in meinem Gästebuch einzufügen?
Bei mir klappt das ganze nicht, da kommen immer Fehlermeldungen!

mfg El_Tomato
 
Zurück