Vinzenz Mai: Sicherer PHP Code?

Beitrag lesen

Hallo Nils,

Ist der nachfolgende Code sicher

er ist vor allen Dingen fehlerhaft, Matze und EKKi haben Dich schon auf die
wichtigsten Unterlassungen hingewiesen, auf die ich nicht mehr als nötig
eingehen werde:

[code lang=php]
<?php

$inhalt = "";
$quelle = "text.xml";

if (isset($_POST['textfeld'])) {
   $inhalt = stripslashes($_POST['textfeld']);

// Du verläßt Dich hier darauf, dass magic_quotes auf on stehen.
// Verwende lieber die im PHP-Handbuch aufgeführte Version.
// Grundsätzlich ist es eine gute Idee, Rohdaten abzuspeichern.

// Nehmen wir nun an, $inhalt sei von der Slashitis geheilt ...

$dateihandler = fopen($quelle, "w+");
   fwrite($dateihandler, $inhalt);
   fclose($dateihandler);
}

else {
   $dateihandler = fopen("text.xml", "r");
   $inhalt = fread($dateihandler, filesize($quelle));

// ... nehmen wir an, der Inhalt der Datei leide nicht an Slashitis,
// wozu auch?

}

// Du hast also hier eine Variable $inhalt, die nicht unter Slashitis leidet.
// Diese enthält möglicherweise wunderbar erforderliche Slashes, z.B. für
// Linkziele, Kommentare :-), Verzeichnisangaben oder im Text als
// Trennzeichen, was auch immer.

$inhalt = stripslashes($inhalt);

// Oh je, Slashes, die da sein sollten, sind nun weg :-(
// $inhalt leidet jetzt nicht an Slashitis, dafür an akutem Slashmangel.

[...]

<form action="formular-xml-in-datei.php" method="post">

// in der folgenden Zeile ist die Ausgabe der Variablen dem Kontext, (X)HTML
// gemäß zu maskieren: echo html_special_chars($inhalt)

<textarea name="textfeld" rows="10" cols="50"><?php echo $inhalt ?></textarea>

[...]

Freundliche Grüße

Vinzenz