Ist halt besser, finde ich, vor allem wenn man mehrere Seiten hat, spart man sich Code und vor allem auch das Copy & Pasten bzw. neu schreiben des Codes.
Der Header an sich ist aber alles andere als sicher, zumal das ja auch von Browsern unterschiedlich gehandhabt wird. Firefox z.B. reagiert auf den Header meine ich immer noch nicht. ()
Und bspw Nutzung von htmlspecialchars bei einem Request auf alle eingehenden GET/POST Params ist ja auch kein großer Aufwand. Das selbe gilt für die Ausgabe direkt ins Template, zumal die meisten gängigen Frameworks mit Template-Engine sowas meist auch schon direkt unterstützen.
htmlentities() macht imho nur Sinn, wenn du was von fremden Usern/Seiten importierst, direkt darstellst und wirklich, wirklich sicher gehen willst, dass dabei nichts durchflutscht.
Der Nachteil ist dann natürlich, dass du deinen gesamten Text aufsplitten musst, falls du doch eins der Zeichen im RAW-Kontext nutzen willst (XML etc.).
Da man aber allgemein selten bis nie fremdes Material unbearbeitet übernehmen sollte, macht specialchars() am meisten Sinn, wenn dein Code lesbar bleiben soll. Ansonsten mit entities() drüber hauen. Den Output bearbeiten wirst du aber in jedem Fall müssen ->
Der Header an sich ist aber alles andere als sicher, zumal das ja auch von Browsern unterschiedlich gehandhabt wird. Firefox z.B. reagiert auf den Header meine ich immer noch nicht. ()
Und bspw Nutzung von htmlspecialchars bei einem Request auf alle eingehenden GET/POST Params ist ja auch kein großer Aufwand. Das selbe gilt für die Ausgabe direkt ins Template, zumal die meisten gängigen Frameworks mit Template-Engine sowas meist auch schon direkt unterstützen.
Ich hab mir ein eigenes Framework incl. CMS geschrieben (auf MVC-Basis). Da können "bestimmte" Leute dann auch was eintragen (KEIN! direkter Admin-Zugriff!). Und da brauch ich das dann. Weil selbst "sicher" ist nicht sicher
Ich probier mich gerade an Laravel aus, weil's ja noch einfacher sein soll. Atm. muss ich ja für eine Funktion in mehreren Pages was schreiben, was ziemlich aufwändig ist. Und weiß auch noch nicht ganz, ob das Laravel-Framework XSS-Scripting von sich selbst aus verhindert.
@ nie was von gehört, xss header im webserver setzen sollte auch ausreichen.
Das reicht nicht. Gerade wenn du mit Datenbanken arbeitest, wirst du sicher damit an die grenzen kommen. Generell arbeite ich mit htmlentites, weil hier alle geeigneten Zeichen in HTML-Code umgewandelt wird.
So verhinderst du auch das man die Fremdcode unterschmuggelt, der dann beim Aufruf ausgeführt wird. Das geschieht durch die Umwandlung in HTML-Code. Schau mal da wird das eigentlich super erklärt. Und denkt nicht, das eine sicherung ausreichen wird. Das erschwert vielleicht ein wenig, macht die Seite oder das Framework nicht sicher. 100%iger Schutz gibt es nicht und wird es auch nicht geben.
GER:
-----
Hey Community,
wie der Titel es schon sagt:
htmlspecialchars() vs. htmlentities() - was benutzt ihr und warum?
-----
Da gibt es eigentlich nur einen Fall an dem man es wirklich nutzen kann.
Und zwar bei der Ausgabe. Sprich deine View Kompontente kümmert sich darum deinen Text escaped auszugeben.
Es gibt durchaus auch andere Anwendungsfälle bei denen es sinnvoll sein kann, aber die sind eher selten in Gebrauch. Zb. wenn man Text im Javascript oder CDATA ablegen will ...
Wenn du Eingangsparameter filtern/sanitizen willst empfielt es sich die Filter Funktionen zu nutzen die es seit PHP5 gibt.
Hoffe das hilft dir weiter.
//edit:
Quote:
Atm. muss ich ja für eine Funktion in mehreren Pages was schreiben
Öhm, dann machst du etwas grundlegendes falsch Egal welches Framework oder ob selbstgeschriebenes. Lagere deine Funktion in eine Klasse oder wenigstens eine Include Datei aus und nutze dann selbige. Dann schreibst du die Funktion auch nur einmal
Htmlentities mit nl2br und datenbanktext ausgabe 12/02/2012 - Web Development - 4 Replies Hey, hab 2 Probleme die ich noch nie im Leben hatte und bin wirklich ratlos da es eigentlich immer funktioniert hat:
Habe einen text, wenn ich ihn jetzt stinknormal in Html einfüge geht er normal in die box und wenn er an den Rand kommt gehts in die nächste zeile, wenn ich genau den gleichen text aber aus der Datenbank hole und mit echo ausgebe ist alles in einer Zeile und zieht sich über die ganze seite.
Desweitere funktioniert nl2br nicht mehr wenn htmlentities vorher gemacht wurde,...