Benutzereingaben escapen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
attribut
ausgabe
beispiel
benutzen
code
datenbank
dom
einbinden
eingabe
frage
funktion
http
inhalt
manual
parameter
string
url
windows
zweifel
-
Hallo,
ich habe bisher immer die Funktionen mysql_real_escape_string (für MySQL-Abfragen) und htmlspecialchars (Ausgabe auf der Website) verwendet.
Mir kamen dann Zweifel, ob htmlspecialchars auch ausreicht, wann man die eingaben in ein href Attribut schreiben möchte und ich bin dann über diese Stackoverflow-Frage zu dieser Seite gekommen:
XSS (Cross Site Scripting) Prevention Cheat Sheet
Jetzt würde mich interessieren, was ihr dazu meint. Sollte ich mir diesen Encoder runterladen und einbinden oder gibt es auch einfachere Scripts, um die Eingaben nicht nur in HTML, sondern auch in href-attributen und Javascript Handlern zu escapen?
Beispiel:
function escape1($str) { return ?; } function escape2($str) { return ?; } function escape3($str) { return htmlspecialchars($str); } <a href="<?php echo escape1($data); ?>" onclick="clicked('<?php echo escape2($data); ?>');"><?php echo escape3($data); ?></a>
Beitrag zuletzt geändert: 27.8.2011 17:34:37 von abi-physik -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also ich verwende für alles was rein geht (_GET/_POST/_REQUEST/_COOKIE) folgendes Script: (wobei dies eine Funktion ist welche mittels array_walk "arbeitet"
if (get_magic_quotes_gpc()) { $item = stripslashes($item); } $item = trim($item); $item = addslashes($item); $item = utf8_encode($item);
Wenn dann noch etwas zur Datenbank abfrage verwendet wird: PDO::quote
und zur Ausgabe mindestes:
htmlentities($str, ENT_QUOTES, 'UTF-8');
ich bin damit bis jetzt immer gut gefahren.
Beitrag zuletzt geändert: 27.8.2011 22:43:23 von andre-morillon -
abi-physik schrieb:
Hallo,
ich habe bisher immer die Funktionen mysql_real_escape_string (für MySQL-Abfragen) und htmlspecialchars (Ausgabe auf der Website) verwendet.
Besser als SQL-Query-Strings aus Einzelteilen zusammenzukleben, die dann je nach Disziplin und Hintergrundwissen des Programmierers mit mysql_real_escape_string() abgesichert werden, ist die Verwendung von "parameterized queries". Auf einer aktuellen PHP-Version kannst du dazu alle Datenbank-Treiber benutzen, die Prepared Statements unterstützen, also PDO, mysqli, SQLite3, usw.
Mir kamen dann Zweifel, ob htmlspecialchars auch ausreicht, wann man die eingaben in ein href Attribut schreiben möchte und ich bin dann über diese Stackoverflow-Frage zu dieser Seite gekommen:
...
Jetzt würde mich interessieren, was ihr dazu meint. Sollte ich mir diesen Encoder runterladen und einbinden oder gibt es auch einfachere Scripts, um die Eingaben nicht nur in HTML, sondern auch in href-attributen und Javascript Handlern zu escapen?
htmlspecialchars() kennt einen Parameter ENT_QUOTES. Der ist für den Fall gedacht, dass man Attribute in HTML-Tags mit Inhalten befüllen möchte.
Beispiel:
function escape1($str) { return ?; } function escape2($str) { return ?; } function escape3($str) { return htmlspecialchars($str); } <a href="<?php echo escape1($data); ?>" onclick="clicked('<?php echo escape2($data); ?>');"><?php echo escape3($data); ?></a>
Wer soll das dauerhaft warten? Entweder du benutzt eine vernünftige Template-Engine, die sicherstellt, dass an den entsprechenden Stellen automatisch und richtig "escaped" wird, oder du erzeugst dein HTML "programmatisch". Prinzipiell kann man dazu die DOM-Erweiterung in PHP benutzen. (Ich würde meine DOM-Klasse zwar selbst schreiben, aber das ist eine andere Geschichte )
Ach so und: Wer strip_slashes()/add_slashes()/htmlentities() benutzt, frisst auch kleine Kinder.
Grundlos utf8_encode() auf Benutzereingaben loszulassen, führt dazu, dass schon UTF-8-kodierte Daten verstümmelt werden. "bis jetzt immer gut gefahren" bedeutet dann wohl, dass noch nie ein Benutzer Zeichen eingegeben hat, die über den Windows-1252-Codepage-Bereich hinausgingen oder die verwendeten Browser alle aus der Steinzeit stammen und nur Windows-1252 kennen. Das kann ich mir aber nicht wirklich vorstellen ...
Beitrag zuletzt geändert: 28.8.2011 0:09:36 von alopex -
alopex schrieb:
htmlspecialchars() kennt einen Parameter ENT_QUOTES. Der ist für den Fall gedacht, dass man Attribute in HTML-Tags mit Inhalten befüllen möchte.
Okay, dann werde ich das mal einbauen und mir demnächst ein paar Template Engines anschauen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage