Hilfe bei regulären Ausdrücken benötigt

Vielleicht muss das i escaped werden, ist aber nur eine wage Vermutung.
Escape mal alle Zeichen von img und dann nimm nach und nach ein "\" weg.

Mal was anderes:
Was wenn in einem deiner erlaubten Tags JS steht?
HTML:
<p onload="window.open();">foo</p>

Wird sowas dann ausgeführt? Mit einer Schleife könnte man richtig viele PopUps erzeugen :)
 
Probier Folgendes:
PHP:
$str = '<p>text</p><script>text</script><a href="http://example.com/?foo&amp;bar">text</a>';
$str = preg_replace('/&lt;(\/?(?:a|p|img)(?:\s+(?:[^&]+|&(?!gt;))+)?)&gt;/e', '"<".htmlspecialchars_decode("\1").">"', htmlspecialchars($str));
Diese einfache Maßnahme schützt jedoch nicht vor alle Möglichkeiten des XSS. Ein richtiger Parser ist da besser geeignet.
 
Zuletzt bearbeitet:
@ZodiacPc: Durch eine andere Funktion entferne ich die möglichen Javascript Tags(onmouseover onclick .....). Ich hab jetzt auch mal alle möglichen Kombinationen(vorher hat ich nur mal das i escaped) ausprobiert. Das Problem besteht weiter.
@Duxias: Ich erarbeite mir grad nen Art WYSIWYG Editor, bei dem schon von vornherein die Bilder und Links als solche angezeigt werden. Und somit find ich das mit dem BBCode dann doch nen bisschen umständlich fand.
@Maik: gut das du es sagst mit dem /> hinten beim img.
@Gumbo: Dein Vorschlag ersetzt bei mir trotzdem wirklich alle < und > durch &lt; und &gt; auch bei p a und img. Und danke wegen dem Verweis auf das XSS, da lass ich mir noch was entsprechendes einfallen.
 
Zuletzt bearbeitet:
Hi,

Ich hab jetzt auch mal alle möglichen Kombinationen(vorher hat ich nur mal das i escaped) ausprobiert. Das Problem besteht weiter.

ist ja auch Quatsch. Die Fehlermeldung sagt es doch ganz deutlich. Bei einer Look-Behind-Assertion darf die Assertion halt keine variable Länge haben. Und "img" hat gegenüber "a" und "p" nunmal 3 Zeichen. Wenn Du das schon ohne img ausprobiert hast, warst Du offensichtlich ja auch schon auf der richtigen Spur...

Ansonsten s. Gumbo (mach das mit einem richtigen Parser).

LG
 
Vielen Dank Gumbo.

@kuddeldaddeldu: Warum akzeptiert er dann
PHP:
$str=preg_replace("/<(?!(\/img|\/a|\/p|a|img|p))/","&lt;",$str);
Anstandslos? Da sind ja auch a img und p auch gemischt drin.
 
Zuletzt bearbeitet:
Zurück