htmlentities vs. htmlspecialchars

06/16/2016 11:20 aiimsh0ckz#1
GER:
-----
Hey Community,
wie der Titel es schon sagt:

htmlspecialchars() vs. htmlentities() - was benutzt ihr und warum?
-----

ENG:
------
Hey Community,
as the titles already says it:

htmlspecialchars() vs. htmlentities() - which one do you use and why?
-----

Greez, aiimsh0ckz.
06/16/2016 19:03 Punisher.biz#2
Keines von beidem ¯\_(ツ)_/¯

Ich wandle direkt die .html/.php in das richtige Format um, da kann ich dann umlaute und sonstiges nach Lust und Laune nutzen.
06/17/2016 07:32 aiimsh0ckz#3
@[Only registered and activated users can see links. Click Here To Register...]:

Geht um XSS-Injection. Also um die Strings ins passende Format zu setzen, um XSS zu vermeiden.
06/17/2016 10:34 Punisher.biz#4
@[Only registered and activated users can see links. Click Here To Register...] nie was von gehört, xss header im webserver setzen sollte auch ausreichen.
06/17/2016 10:36 aiimsh0ckz#5
Hmm, davon hab ich wiederum noch nie was gehört. Schein wohl auch ganz nett zu sein.
06/17/2016 13:36 Punisher.biz#6
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.
06/18/2016 12:06 Cholik#7
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. ([Only registered and activated users can see links. Click Here To Register...])

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.
06/19/2016 12:22 krosswarrior#8
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 -> [Only registered and activated users can see links. Click Here To Register...]
06/20/2016 07:38 aiimsh0ckz#9
Quote:
Originally Posted by Cholik View Post
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. ([Only registered and activated users can see links. Click Here To Register...])

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.
06/20/2016 09:21 darktown#10
Quote:
Originally Posted by Punisher.biz View Post
@[Only registered and activated users can see links. Click Here To Register...] 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 [Only registered and activated users can see links. Click Here To Register...] 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.
06/20/2016 13:14 Waschbaerfell#11
Quote:
Originally Posted by aiimsh0ckz View Post
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. [Only registered and activated users can see links. Click Here To Register...]

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 ;)
06/26/2016 20:20 Nevada'#12
Quote:
Originally Posted by aiimsh0ckz View Post
GER:
-----
Hey Community,
wie der Titel es schon sagt:

htmlspecialchars() vs. htmlentities() - was benutzt ihr und warum?
-----

ENG:
------
Hey Community,
as the titles already says it:

htmlspecialchars() vs. htmlentities() - which one do you use and why?
-----

Greez, aiimsh0ckz.
Um XXS zu vermeiden solltest du folgenden Code nutzen

Code:
<?php echo htmlentities($deinstring, ENT_QUOTES, 'UTF-8');?>
06/26/2016 21:38 Shawak#13
Du kannst dir diesbezüglich auch mal filter_var anschauen. Ist meiner Meinung nach eine sehr gute Alternative.

[Only registered and activated users can see links. Click Here To Register...]