burghi'sphp-dummies.de
PHP für Einsteiger und Fortgeschrittenere - an laufenden Scripten erklärt
10.02.2012, 09:41 Uhr - Impressum

Tutorials - Erste Schritte - Formulare - HTML-Eingabe verhindern

Tutorials - Erste Schritte
Formulare: HTML-Eingabe verhindern
Wichtiger zu vermeiden als ein paar läppische Leerzeichen ist eine HTML-Eingabe des Benutzers.
Im folgenden Beispiel habe ich eine einfache Tabelle gemalt.
In Zelle 2 soll das Ergebnis des Formulars ausgegeben werden. Mit Eingabe von "</table>" (dem Tabellen-Schließbefehl) in das Formularfeld kann ein User diese Tabellenoptik nachhaltig zerstören - oder er könnte sogar fiese JavaScripts oder JavaApplets einbauen.
Teste es mal durch Eingabe eines reinen Textes, und dann durch Eingabe von "</table>"
gesetzt in $_POST 'Tabellentext', 'absenden'
<html>
     <table width="180" border="1" cellspacing="2" cellpadding="0">
          <tr>
               <td>1</td>
               <td>
<?php echo $_POST['Tabellentext'];?></td>
               <td>3</td>
          </tr>
          <tr>
               <td>4</td>
               <td>5</td>
               <td>6</td>
          </tr>
     </table>
</html>
Zelle2:
FormularQuelltext anzeigen
<html>
     <form method="post" action="/script.php">
          Zelle2: <input type="text" name="Tabellentext"><br />
          <input type="submit" name="absenden" value="Script starten">
     </form>
</html>
Dies kann man verhindern, indem man die Funktion htmlspecialchars() auf die Variable anwendet.
htmlspecialchars heißt übersetzt HTML-Sonderzeichen.
Denn die HTML-Signalzeichen "<" und ">" werden dann umgewandelt in &lt; (lower than / kleiner als) und &gt; (greater than / größer als) (also die mathematischen Bedeutungen) - so können sie keinen Schaden mehr anrichten
gesetzt in $_POST 'Tabellentext', 'absenden'
<?php
$Tabellentext = htmlspecialchars($_POST['Tabellentext']);
?>

<html>
     <table width="180" border="1" cellspacing="2" cellpadding="0">
          <tr>
               <td>1</td>
               <td>
<?php echo $Tabellentext;?></td>
               <td>3</td>
          </tr>
          <tr>
               <td>4</td>
               <td>5</td>
               <td>6</td>
          </tr>
     </table>
</html>
Zelle2:
FormularQuelltext anzeigen
<html>
     <form method="post" action="/script.php">
          Zelle2: <input type="text" name="Tabellentext"><br />
          <input type="submit" name="absenden" value="Script starten">
     </form>
</html>
Funktionen kann man in PHP natürlich auch kombinieren.
Hier wird zuerst ( wie in Mathe wird von innen nach außen in den Klammern "gerechnet") htmlspecialchars() ausgeführt, dann werden per trim() überflüssige Leerzeichen abgeschnitten
gesetzt in $_POST 'Vorname', 'Nachname', 'Straße', 'HausNr', 'absenden'
<?php
$error = 0;

$Vorname = trim(htmlspecialchars($_POST['Vorname']));
$Nachname = trim(htmlspecialchars($_POST['Nachname']));
$Straße = trim(htmlspecialchars($_POST['Straße']));
$HausNr = trim(htmlspecialchars($_POST['HausNr']));

if($Vorname == "" or $Nachname == "" or $Straße == "" or $HausNr == "") {
     $error = 1;
}

if($error == 0) {
     echo "Der Mensch vor diesem PC heißt $Vorname $Nachname,
          er wohnt in der $Straße $HausNr.
";
}
else {
     echo "<font color=red><b>FEHLER IN DEN EINGABEN !!!<br />
          Bitte fülle alle Felder aus</b></font>
";
}
?>
Vorname:
Nachname:
Straße:
Hausnummer:
FormularQuelltext anzeigen
<html>
     <form method="post" action="/script.php">
          Vorname: <input type="text" name="Vorname"><br />
          Nachname: <input type="text" name="Nachname"><br />
          Straße: <input type="text" name="Straße"><br />
          Hausnummer: <input type="text" name="HausNr" size="5"><br />
          <input type="submit" name="absenden" value="Script starten">
     </form>
</html>
© 2004-2005 - Impressum