私は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。どうすればそれを解読できますか?
「 'と' '? – JustinJmnz
@JustinJmnz基本的には文字列をエスケープしていますが、 '\ /'は少しでも無意味ですが、 '/'をエスケープする必要はありませんが、改行の '\ n'はエスケープしたいと思います。 – Keith
@Keith:だから、 のような文字列をエスケープする必要がありますか? 'script_code = escape(script_code)'? – Cybergy