在HTTP帖子请求中发送JavaScript

时间:2017-11-15 13:25:55

标签: javascript post request

我们说我有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>

所以我想发送脚本本身。我怎么解码呢?

1 个答案:

答案 0 :(得分:0)

这完全取决于'foo.html'处理帖子请求的方式。

邮寄请求很可能在那里进行了清理。