2010-12-10 7 views
4

Ich brauche ein wenig Hilfe. Ich muss eine JavaScript-Zeichenfolge erstellen, die mehr Javascript enthält, das dann in einem Div-Tag in dem übergeordneten Fenster geschrieben wird. Der Code lautet wie folgt:Javascript-Variable, die enthält</script>

<script language="javascript" type="text/javascript"> 
var jstr2 = ''; 
jstr2 += '<script language="javascript">\n'; 
jstr2 += 'function doPagingProducts(str) {\n'; 
jstr2 += 'document.frmPagingProducts.PG.value = str\;\n'; 
jstr2 += 'document.frmPagingProducts.submit()\;\n'; 
jstr2 += 'return false\;\n'; 
jstr2 += '}\n'; 
jstr2 += '</script>\n'; 
jstr2 += '\n'; 
</script> 

jedoch das Schließen Script-Tag in der erstellten Zeichenfolge tatsächlich die Javascript schließen und ich bekomme Fehler wie:

Error: unterminated string literal 
Line: 135, Column: 9 (The </script> line before the end of the string.) 
Source Code: 
jstr2 += ' 

Gibt es eine Möglichkeit, dieses Problem vermeiden kann. .?

Vielen Dank für Ihre Hilfe.

Mit besten Grüßen, Paul


bearbeiten Ich löste dieses Problem endlich durch die endgültigen </script> aus dem JavaScript-String zu extrahieren. Ich habe ein End-Tag hinzugefügt, wo das Skript zeigt. Es ist chaotisch, aber es funktioniert. Vielen Dank für Ihre Kommentare.

+0

Das ist eine berechtigte Frage. Als Webentwickler möchte ich grundlegende XSS-Versuche in meine gespeicherten Daten auf der Site einfügen, an der ich arbeite - zum Beispiel die Benennung einer Entität ""; Es ist kein umfassender Test, aber es hilft, das Frontend ehrlich zu halten. Ich sollte in der Lage sein, JSON, das diese Zeichenfolgen enthält, in einem Skript-Tag im HTML ohne Problem auszugeben. –

+0

http: // Stapelüberlauf.com/questions/23386575/why-js-kann-verstehen-string-script/23386677 # 23386677 –

Antwort

4

Sie haben die Zeichenfolge aufgeteilt:

jstr2 += '<' + '/script>\n'; 

Es ist auch besser, alles im Script Kommentar aus:

<script type="text/javascript"> 
<!--// 
    // your code here 
//--> 
</script> 

Oder in HTML:

<script type="text/javascript"> 
//<![CDATA[ 
    // your code here 
//]]> 
</script> 

Oder in XHTML :

  • wie HTML, aber #PCDATA anstelle von CDATA.
+0

wie unterscheidet sich ' \ n' von '<' + '/ script> \ n'? – Matt

+0

Leider hat das nicht funktioniert ... – neojakey

+0

@Matt - es sieht nicht wie ein Close-Tag zu einem HTML-Parser aus. – Quentin

6

schreiben als:

jstr2 += '<\/script>\n'; 
17

Die SCRIPT Tag-Inhalt Agnostiker ist, so dass der Parser durch den Inhalt läuft hält nur bis es findet eine /SCRIPT Sequenz. Wenn dies der Fall ist, übergibt es den Inhalt, den es gefunden hat, zur Auswertung an die JS-Umgebung. Das gibt Ihnen Ihren unterminierten literalen Fehler, da der gesendete Inhalt dort endet, wo Ihr /SCRIPT beginnt. (Es gibt kein abschließendes Anführungszeichen für den JS-Parser).

Escaping the Slash mit Backslash

jstr2 += "<\/script>"; 

oder einer anderen Behelfslösung Hack bricht den Triggerpunkt in der Folge hier und löst dieses Problem (aber immer noch läßt Sie mit einigem sehr fragwürdigen Code).

Verwandte Themen