我们说我有foo.html,并且有一个文本字段,我提交的文字会在网站上显示。可以在此文本字段中编写JavaScript。例如,<script>alert(1)</script>
和<script>alert(1);</script>
有效。
我想要做的是将每个帖子请求的JavaScript作为消息发送到foo.html。表单有一个文本区域,其名称为&#34; textfield&#34;。我应该发送另一个脚本代码的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,但它不起作用。如果我删除所有分号,它也不起作用。这就是为什么我的问题是: &#34;脚本作为字符串&#34;是什么?必须看起来像是这样的吗?
编辑: @Keith让我说我想尝试以下方法:
<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>
所以我想发送脚本本身。我怎么解码呢?
答案 0 :(得分:0)
这完全取决于'foo.html'处理帖子请求的方式。
邮寄请求很可能在那里进行了清理。