2009-04-30 5 views
1

Der wichtigste Punkt zu machen „<“ auf „\ <“ und „>“ auf „>“ ist unter Inline-Skript zu machen vermeiden:Behandeln alle Browser-Engines " <" als "<" and ">" als ">"?

<script> 
    var foo = "</script><script>alert('bug');</script><script>"; // the value of foo is generated from server 
</script> 

Der String-Wert von foo wird von Server-Seite erzeugt. Wir planen daher, "<" in "\ <" und ">" in ">" zu ändern. (Ich weiß, es ist Argument, dass ">" entwertet werden sollte "& gt;", aber es ist nicht in Betracht in diesem Fall.)

Also, das erwartete Ergebnis ist:

<script> 
    var foo = "\</script\>\<script\>alert('bug');\</script\>\<script\>"; // the value of foo is generated from server 
</script> 

Für IE7/8 und Firefox, werden die HTML-Rendering-Engine \ < Skript \ > in JavaScript-String als <Skript> Tag und JavaScript-Engine nimmt nicht behandeln es noch als String "<Skript>". Ich bin mir jedoch nicht sicher, ob alle Browser ">" und "\ <" auf diese Weise behandeln. Ist diese Art von Standard für alle Browser?

+0

FYI, Chrome und Safari tun es nicht entweder – cgp

+0

sehen http://jsbin.com/ecefo – cgp

Antwort

5

Nein, Ihre beste Wette ist zu verwenden & gt; und & lt; für die Größer als und weniger als Zeichen jeweils.

So würden Sie so etwas wie dies wollen:

var foo = "&lt;/script&gt;&lt;script&gt;alert('bug');&lt;/script&gt;&lt;script&gt;"; 
+0

Oh, ich hatte nie eine solche Ding passiert mir vorher. Wie seltsam. – cgp

+0

prüfe ich es auf gängigen Browsern: IE5 auf WinXP IE7 IE8 Firefox auf Win Firefox auf Mac Safari auf Mac Sie sind treat inline "\>" als ">". –