2017-11-15 22 views
0

私はfoo.htmlを持っていて、後でそのサイトに表示されるテキストを送信するテキストフィールドがあるとします。このテキストフィールドにJavaScriptを書くことができます。例えば、<script>alert(1)</script><script>alert(1);</script>があります。HTTPポストリクエストでJavaScriptを送信する

私がしたいことは、投稿リクエストごとにJavaScriptをfoo.htmlに送信することです。フォームにはテキスト領域があり、その名前は "textfield"です。別のスクリプトコードを送信するJavaScriptコードは、次のようになります。

var r = new XMLHttpRequest(); 
var script_code = "<script>alert(1)<\/script>"; 
url = "foo.html"; 
r.open("POST", url, false); 
var content = "textfield=".concat(script_code); 
r.send(content); 

これは問題ありません。しかし、私は混乱していますので:

var r = new XMLHttpRequest(); 
var script_code = "<script>alert(1);<\/script>"; 
url = "foo.html"; 
r.open("POST", url, false); 
var content = "textfield=".concat(script_code); 
r.send(content); 

または

var r = new XMLHttpRequest(); 
var script_code = "<script>alert(1);\n alert(2);<\/script>"; 
url = "foo.html"; 
r.open("POST", url, false); 
var content = "textfield=".concat(script_code); 
r.send(content); 

は動作しません。私は、セミコロンを削除した場合には、再び動作します:

var r = new XMLHttpRequest(); 
var script_code = "<script>alert(1);\n alert(2);<\/script>"; 
script_code = script_code.replace(/;/g,""); 
url = "foo.html"; 
r.open("POST", url, false); 
var content = "textfield=".concat(script_code); 
r.send(content); 

をしかし、私ははるかに大きいのスクリプトは、私がfoo.htmlということではなく、それは動作しません送信したい文字列として保存されています。すべてのセミコロンを削除してもうまくいきません。だから私の質問は次のとおりです: "スクリプトは文字列として"は何のように見えるのですか?

EDIT:

<script id=script_id> 
//TODO: What do I have to write here to decode? 
var r = new XMLHttpRequest(); 
alert(1); 
alert(2); 
var script_code = document.getElementById("script_id").innerHTML; 
var sub_string_begin='<script>'; 
var sub_string_end="<\/script>"; 
script_code = sub_string_begin.concat(script_code, sub_string_end); 

url = "foo.html"; 
r.open("POST", url, false); 
var content = "textfield=".concat(script_code); 
content = encodeURIComponent(content); 
r.send(content); 
</script> 

だから私は、スクリプト自体を送りたい: のは、私は次のことを試してみたいとしましょう@Keith。どうすればそれを解読できますか?

+0

'と' '? – JustinJmnz

+0

@JustinJmnz基本的には文字列をエスケープしていますが、 '\ /'は少しでも無意味ですが、 '/'をエスケープする必要はありませんが、改行の '\ n'はエスケープしたいと思います。 – Keith

+0

@Keith:だから、 のような文字列をエスケープする必要がありますか? 'script_code = escape(script_code)'? – Cybergy

答えて

0

「foo.html」によってどのように投稿要求が処理されるかによって異なります。

投稿リクエストがそこで消されている可能性があります。

関連する問題