MudGuard: schließendes script-tag im String

Beitrag lesen

Hi,

<html>
<head>
<script type="text/javascript">
alert("wont be alerted");
alert("</script>");
alert("will be written to document");
</script>
</head>
<body>
</body>
</html>


>   
> ausgegeben wird:  
>   
> `"); alert("will be written to document"); `{:.language-html}  
>   
> Ich kann nicht verstehen, warum das schließende script-tag, obwohl es im String steht, alles kaputt macht.  
  
Weil der HTML-Parser sich nicht dafür interessiert, ob sich die Zeichenfolge </script> in einem Javascript-String befindet. Er sucht nach dem öffnenden script-Tag einfach das erste schließende script-Tag (also die Zeichenfolge </script>  
(genaugenommen müßte er sogar den Script-Block beim ersten </ beenden)  
  
Der Javascript-Parser bekommt also nur  
  
            alert("wont be alerted");  
            alert("  
  
vorgeworfen. Und das kann er nicht erfolgreich parsen, also wird das Script dann auch nicht ausgeführt, da es ja syntaktisch falsch ist.  
  

> Nicht mal das erste alert wird ausgeführt.  
  
Natürlich nicht.  
  

> Hat jemand dafür eine Erklärung?  
  
s.o.  
  
Sorge dafür, daß die Zeichenfolge </ nicht im Javascript auftaucht, z.B. durch escapen des / per \, also <\/ oder durch Aufteilen des Strings "<" + "/script".  
  

> Und weiter: Gibt es workarounds oder Maßnahmen, um user-inputs entsprechend zu filter, damit sie, falls sie nach Eingabe irgendwo in die Seite geschrieben werden nicht alles kaputt machen wenn ein "</script>" eingegeben wird !?  
  
Ja, behandle sie kontextgerecht, zwei Möglichkeiten für Script hab ich schon gegeben, für HTML allgemein: < durch &lt; ersetzen, wenn keine Tags gewünscht werden.  
  
cu,  
Andreas

-- 
[Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
[O o ostern ...](http://ostereier.andreas-waechter.de/)  
  
Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.