Sicherheit: Escape hier nötig?
lima-city → Forum → Die eigene Homepage → Sicherheit im Internet
anrichten
behandeln
code
datei
eigentlichen kommentar
export
formatierung
frage
funktion
gefunden url
gewisses muster
http
kommentar
moderation
sonderzeichen
string
strip
text
url
zeichen
-
Moin Leute,
ich habe ein kleines Script, welches Inhalte (Texte) in eine Datei legt.
Normalerweise sollte man ja alles escapen, was rein kommt, ich frage mich nur, ob das hier nötig ist. Die Datei wird später via javascript ausgelesen, dass ich dort escapen muss, um das ausführen im Text enthaltener Scripte oder HTML-Weiterleitungen zu vermeiden ist mir klar, jedoch frage ich mich, was ein nicht escapter String bei PHP alleine anrichten kann.
Eine Variante ohne Datenbankverbindung zu escapen habe ich dank willstdueswissen bereits gefunden:
http://evertpot.com/escaping-mysql-strings-with-no-connection-available/
Wie man dort lesen kann ist diese aber auch nicht zu 100% sicher.
Das ist das php-Script, welches ich getippselt habe:
<?php $dir = $_POST['url']; $user = $_POST['user']; $comment = $_POST['comment']; $filename = $dir . "/". time() . "\n"; $seperator = "--- \n"; $moderation = "moderated: 0" . "\n"; if ("" == trim($user)) $user = "user: Anonymous \n"; else $user = "user: " . $user . "\n"; echo($dir . "\n"); echo($user . "\n"); echo($comment . "\n"); echo($filename); if (!file_exists($dir)) { mkdir($dir, 0755); } $commentfile = fopen($filename, "w"); fwrite($commentfile, $seperator . $moderation . $user . $seperator . $comment ); fclose($commentfile); ?>
Grüße
tchab -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich würde da schon soviel wie möglich mit PHP machen. Dann sind die Ausgangsdateien nachher nicht so vollgestopft mit unnötigem Zeug.
Beim Verzeichnisnamen hast du ja bestimmt ein gewisses Muster, kannst daraus also ableiten, welche Zeichen benötigt werden und welche nicht. Wenn z.B: das Zeichen
nicht benötigt wird, schließen sich schon mal viele Angriffsszenarien aus./
Beim Namen werden sicherlich auch nicht alle Zeichen benötigt, wie z.B. Zeilenumbrüche oder sonstige Steuerzeichen.
Beim eigentlichen Kommentar sollen vermutlich keine oder zumindest nicht alle HTML-Tags erlaubt sein, da gibt es dann die nützliche Funktion strip_tags, die die HTML-Tags entfernt und auch eine Whitelist anbietet.
Desweiteren solltest du vor der Ausgabe noch berücksichtige, was beim Speichern alles gemacht wurde, bzw. nicht gemacht wurde. Und z.B. den Usernamen mit htmlentities oder einer Äquivalenten Funktion behandeln. -
Danke.
Nach etwas arbeit (und mit Hilfe von thomasba im Jabber) sieht das ganze nun so aus:
<?php $dir = "kommentare/" . preg_replace("|[^\\w]*|", "", $_POST['url']); $user = preg_replace("|[^\\w]*|", "", $_POST['user']); $comment = str_replace(">", ">", htmlentities($_POST['comment'], ENT_QUOTES | ENT_HTML5 , "UTF-8")); $filename = $dir . "/". time() . "_" . $user . "_" . strlen($comment) . ".markdown" ; $seperator = "--- \n"; $moderation = "moderated: 0" . "\n"; if ("" == trim($user)) $user = "user: Anonymous \n"; else $user = "user: " . $user . "\n"; if (!file_exists("kommentare")) mkdir("kommentare", 0755); if (!file_exists($dir)) mkdir($dir, 0755); $commentfile = fopen($filename, "w"); fwrite($commentfile, $seperator . $moderation . $user . $seperator . $comment ); fclose($commentfile); ?>
Aus URL und Usernamen werden alle Sondernzeichen gestrichen, da sie dort nicht benötigt werden
Da die Formatierung später über Markdown geht musste ich sicher stellen, dass keine HTML-Tags eingebettet werden, weswegen < und > erst in < und > umgewandelt werden (so wie alle anderen Sonderzeichen auch, durch htmlentities). Um die Zitatfunktion von Markdown nicht zu zerstören wird > danach wieder in > umgewandelt, jetzt entstehen beim export durch Markdown keine Tags, welche vom Browser interpretiert werden.
Sicherheitstechnisch scheint das jetzt sowohl php-seitig als auch markdown-seitig nicht mehr angreifbar zu sein. Wem etwas auffällt, der kann es mir aber gerne sagen. :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage