htmlspecialchars
André
- php
0 dedlfix0 André
0 Matthias Apsel0 Auge0 Julius- php
- regex
- sicherheit
1 Auge1 Matthias Apsel
Hallo,
wenn ich diese Ausgabe im Browser aufrufe, wird mein HTML mit ausgegeben.
<?php echo htmlspecialchars($hinweis);?>
Dieses liegt am htmlspecialchars. Überalle lese ich, dass ich htmlspecialchars auf alle Fälle nutzten soll, aber in diesem Fall ist es nicht möglich oder kann ich dem htmlspecialchars eine Ausnahme hinzufügen?
In der Datenbank steht dieses:
<a href="kontakt.html">E-Mail schreiben.</a> Wir werden Ihnen gern weiterhelfen.
Tach!
wenn ich diese Ausgabe im Browser aufrufe, wird mein HTML mit ausgegeben.
<?php echo htmlspecialchars($hinweis);?>
Dieses liegt am htmlspecialchars. Überalle lese ich, dass ich htmlspecialchars auf alle Fälle nutzten soll, aber in diesem Fall ist es nicht möglich oder kann ich dem htmlspecialchars eine Ausnahme hinzufügen?
Du liest nicht genau genug oder es ist nicht genau genug beschrieben. Du musst das verwenden, wenn du Daten, die du zur Entwicklungszeit nicht kennst, in HTML einfügst. Die markierte Stelle ist wichtig. Wenn du HTML erstellst und dieses direkt ausgibst, dann ist das der Zeitpunkt. Erzeugst du das HTML früher, dann musst du es zu diesem "früher" erledigen.
In der Datenbank steht dieses:
<a href="kontakt.html">E-Mail schreiben.</a> Wir werden Ihnen gern weiterhelfen.
Warum auch immer HTML in der Datenbank steht ... in dem Fall ist der passende Zeitpunkt der, zu dem das HTML erstellt wird. Also bevor es in die Datenbank gelangt.
Es gibt dabei aber ein Problem, wenn das HTML vom Anwender per Hand erstellt wird. Dann kann man nicht viel mehr machen, als an die Verantwortung des Anwenders zu appellieren, dass der alles korrekt eingibt.
dedlfix.
Hallo,
Warum auch immer HTML in der Datenbank steht ... in dem Fall ist der passende Zeitpunkt der, zu dem das HTML erstellt wird. Also bevor es in die Datenbank gelangt.
Daran kann ich leider nicht viel machen, dafür ist TinyMCE verantwortlich.
Es gibt dabei aber ein Problem, wenn das HTML vom Anwender per Hand erstellt wird. Dann kann man nicht viel mehr machen, als an die Verantwortung des Anwenders zu appellieren, dass der alles korrekt eingibt.
Ok, dann nehme ich das wieder raus und hoffe der User macht kein Misst. Ich kenn es z.B. von Joomla da kann man eine Whitelist anlegen, alle HTML Befehle z.B. <strong> werden zugelassen, der Rest wird nicht beachtet.
Hallo André,
Ok, dann nehme ich das wieder raus und hoffe der User macht kein Misst. Ich kenn es z.B. von Joomla da kann man eine Whitelist anlegen, alle HTML Befehle z.B. <strong> werden zugelassen, der Rest wird nicht beachtet.
Schreibt denn ein Nutzer dieses <a href="kontakt.html">E-Mail schreiben.</a> Wir werden Ihnen gern weiterhelfen.
in die Datenbank?
Bis demnächst
Matthias
Hallo Matthias,
Schreibt denn ein Nutzer dieses
<a href="kontakt.html">E-Mail schreiben.</a> Wir werden Ihnen gern weiterhelfen.
in die Datenbank?
ja, da der Text bei jeder Anzeige sich ändern kann. Manche möchten ein Kontaktformular haben, die anderen möchten einen Mail Link haben.
Hallo André,
Schreibt denn ein Nutzer dieses
<a href="kontakt.html">E-Mail schreiben.</a> Wir werden Ihnen gern weiterhelfen.
in die Datenbank?ja, da der Text bei jeder Anzeige sich ändern kann. Manche möchten ein Kontaktformular haben, die anderen möchten einen Mail Link haben.
Ah, dann ist meine Antwort als falsch anzusehen.
Bis demnächst
Matthias
Hallo André,
<?php echo htmlspecialchars($hinweis);?>
Dieses liegt am htmlspecialchars. Überalle lese ich, dass ich htmlspecialchars auf alle Fälle nutzten soll, aber in diesem Fall ist es nicht möglich oder kann ich dem htmlspecialchars eine Ausnahme hinzufügen?
In der Datenbank steht dieses:
<a href="kontakt.html">E-Mail schreiben.</a> Wir werden Ihnen gern weiterhelfen.
Es ist zwar schlechte Praxis, HTML in eine Datenbank zu schreiben, aber ...
In diesem Fall weißt du genau was drin steht, es sind also keine Nutzereingaben. Du kannst auf htmlspecialchars verzichten. Denn du möchtest ja gern das HTML als HTML ausgegeben haben und nicht als Text.
Bis demnächst
Matthias
Hallo
In diesem Fall weißt du genau was drin steht, es sind also keine Nutzereingaben.
Das weißt du woher [1]?
Tschö, Auge
Oder sollte ich mit Rumpelstilzchen darüber spekulieren, dass dir das der Deibel gesagt haben könnte? ;-) ↩︎
Hallo Auge,
In diesem Fall weißt du genau was drin steht, es sind also keine Nutzereingaben.
Das weißt du woher?
Bis demnächst
Matthias
Hallo
wenn ich diese Ausgabe im Browser aufrufe, wird mein HTML mit ausgegeben.
Dieses liegt am htmlspecialchars. Überalle lese ich, dass ich htmlspecialchars auf alle Fälle nutzten soll, …
Das ist, wenn das Ausgabeformat HTML sein soll, korrekt.
… aber in diesem Fall ist es nicht möglich …
Genauer gesagt, du hast es dir selbst unmöglich gemacht, wie unten zu sehen ist.
… oder kann ich dem htmlspecialchars eine Ausnahme hinzufügen?
Nein. Die Funktion htmlspecialchars
nimmt keine Ausnahmen entgegen.
In der Datenbank steht dieses:
<a href="kontakt.html">E-Mail schreiben.</a> Wir werden Ihnen gern weiterhelfen.
Womit wir bei der Ursache wären. Dass in den Rohdaten HTML-Elemente sind, ist der Grund, warum sie maskiert werden. Würden deine Rohdaten den Link z.B. als BB- oder Markdown-Code (oder andere Arten, die nicht HTML sind) enthalten, könnten diese nach der Behandlung mit htmlspecialchars
in HTML umgewandelt werden. Hier stellt sich die Frage, warum die Rohdaten HTML-Elemente enthalten und wie groß der (einmalige?) Aufwand ist, diese daraus zu entfernen.
Tschö, Auge
Hallo André, Hallo Auge,
wenn es sich nur um Links handelt, könntest du diese (nachdem du htmlspecialchars drüber gejagt hast), per RegEx suchen und durch „echte“ Links ersetzen.
Gruß
Julius
Hallo
wenn es sich nur um Links handelt, könntest du diese (nachdem du htmlspecialchars drüber gejagt hast), per RegEx suchen und durch „echte“ Links ersetzen.
Das ist zwar von hinten durch die Brust in's Auge und eigentlich will man das nicht haben, aber ja, gehen tut's.
Aber weil du das Tag „sicherheit“ hinzugefügt hast, sei explizit gesagt, dass dann alle Links (wenn es denn nur solche sind, die nachbehandelt werden) demaskiert werden. An der Stelle sollte man sich schon sehr sicher sein, dass keine schädlichen Links eingegeben wurden.
Tschö, Auge
Hallo Auge,
Aber weil du das Tag „sicherheit“ hinzugefügt hast, sei explizit gesagt, dass dann alle Links (wenn es denn nur solche sind, die nachbehandelt werden) demaskiert werden. An der Stelle sollte man sich schon sehr sicher sein, dass keine schädlichen Links eingegeben wurden.
Das dürfte aber immer noch sicherer sein, als dem Nutzer zu erlauben, alles Mögliche an HTML, CSS und Javascript einzutragen, oder?
Gibt es eigentlich zu überprüfen, ob ein Link schädlich sein könnte? Dieser Kurzlinkservice meint das zumindest erkennen zu können – steckt da ein Abgleich mit einer Liste mit Malware ausliefernden Seiten dahinter oder wie könnte sowas realisiert worden sein?
Gruß
Julius
Tach!
Aber weil du das Tag „sicherheit“ hinzugefügt hast, sei explizit gesagt, dass dann alle Links (wenn es denn nur solche sind, die nachbehandelt werden) demaskiert werden. An der Stelle sollte man sich schon sehr sicher sein, dass keine schädlichen Links eingegeben wurden.
Das dürfte aber immer noch sicherer sein, als dem Nutzer zu erlauben, alles Mögliche an HTML, CSS und Javascript einzutragen, oder?
Es kommt darauf an, was das Ziel ist. Will man ein CMS erstellen, sollte man davon ausgehen können, dass nur administrativ berechtigte Nutzer Texte erstellen können. Dann kann man die ganze Sache etwas gelassener angehen. Man möchte in aller Regel sogar dem Anwender die Freiheit geben, sich beliebig zu entfalten. Erstellt man hingegen etwas, das unbekannte Nutzer befüllen sollen, dann kann man nicht vorsichtig genug sein.
dedlfix.
Hallo,
Es kommt darauf an, was das Ziel ist. Will man ein CMS erstellen, sollte man davon ausgehen können, dass nur administrativ berechtigte Nutzer Texte erstellen können. Dann kann man die ganze Sache etwas gelassener angehen. Man möchte in aller Regel sogar dem Anwender die Freiheit geben, sich beliebig zu entfalten. Erstellt man hingegen etwas, das unbekannte Nutzer befüllen sollen, dann kann man nicht vorsichtig genug sein.
wie machen die großen CMS System wie z.B. Joomla oder Wordpress dieses? Verzichten die komplett auf htmlspecialchars? In den zwei genannten System habe ich eigentlich alle Freiheiten solange ich den eingebauten Editor nutzte. Wenn ich mir den Quelltext anschauen, habe ich oftmals Inline-CSS.
Tach,
Es kommt darauf an, was das Ziel ist. Will man ein CMS erstellen, sollte man davon ausgehen können, dass nur administrativ berechtigte Nutzer Texte erstellen können. Dann kann man die ganze Sache etwas gelassener angehen. Man möchte in aller Regel sogar dem Anwender die Freiheit geben, sich beliebig zu entfalten. Erstellt man hingegen etwas, das unbekannte Nutzer befüllen sollen, dann kann man nicht vorsichtig genug sein.
wie machen die großen CMS System wie z.B. Joomla oder Wordpress dieses? Verzichten die komplett auf htmlspecialchars? In den zwei genannten System habe ich eigentlich alle Freiheiten solange ich den eingebauten Editor nutzte. Wenn ich mir den Quelltext anschauen, habe ich oftmals Inline-CSS.
ich könnte jetzt nochmal die Antwort kopieren, die du bereits zitierst hast. In diesen CMS ist es je nach Konfiguration vorgesehen, dass du HTML notieren kannst; welche User das dann wo und wie können, ist Entscheidung des zugehörigen Admins.
mfg
Woodfighter
Hallo Julius,
wenn es sich nur um Links handelt, könntest du diese (nachdem du htmlspecialchars drüber gejagt hast), per RegEx suchen und durch „echte“ Links ersetzen.
Es sollte einfach kein HTML in der Datenbank stehen. Ich weiß zwar nicht, wie die Anforderungen sind, aber ich würde in der Konfiguration Felder für Link zum Kontaktformular
, Linkziel
, Linktext
und zusätzlicher Text
vorsehen.
Bis demnächst
Matthias