如果用户输入javascript然后将其发布到另一个页面,我正在测试html页面输入字段会发生什么。
<script>alert("Hey!")</script>
在发布用户输入的数据之前,我将对其进行编码,使其如下所示:
SomePage.aspx页面?消息=%3Cscript%3Ealert(%22Hey!%22)%3B%3C%2Fscript%3
通过ajax发布此内容会导致内部服务器错误500,并且永远不会触发页面加载事件。
如果用户输入的数字少于&#34;&lt;&#34;或者大于&#34;&gt;&#34;一切都很好,所以有一个安全的&#39;发送这样的数据的方式?我认为uri编码就足够了。
这看起来像是对跨脚本攻击检测的响应,我可以对数据进行编码(hexify,base64),但我认为html编码可以做到。
同样,问题在于arg中的html,test4上的页面加载从未被命中,ajax返回&#34;内部服务器错误&#34;。
EDIT2:这是一个重现问题的简单示例:
<!DOCTYPE html>
<html>
<head>
<title>Test 3</title>
</head>
<body>
<div id="myDiv">
</div>
<script>
el = $("#myDiv");
//var arg = "Hello handsome :>"; //ok
//var arg = "< div >"; //ok
//var arg = "< and >"; //ok
var arg = "<div>"; //fail
arg = encodeURIComponent(arg);
$.ajax({ url: "test4.aspx?data=" + arg,
success: function (result) {
el.html(result);
},
error: function (a, b, c) {
el.html("<div>" + c + "</div>");
}
});
</script>
</body>
</html>
Public Class test4
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
targetDiv.InnerHtml = Request("data")
End Sub
End Class
<!DOCTYPE>
<html>
<head>
<title></title>
</head>
<body>
<div runat="server" id="targetDiv">
</div>
</body>
</html>
答案 0 :(得分:0)
如果您使用AJAX,您的页面将不会刷新,并且不会运行Page_Load。 执行代码如下: 这段代码工作正常
var promise = test();
promise.success(function (data) {
alert(data.d);
$("#targetDiv").html(data.d);
});
function test(){
el = $("#myDiv");
//var arg = "Hello handsome :>"; //ok
//var arg = "< div >"; //ok
//var arg = "< and >"; //ok
var arg = "<div>"; //fail
arg = encodeURIComponent(arg);
return $ajax({type: "POST", url: "test4.aspx/update", data: '{cod: "' + arg+ '" }',
contentType: "application/json; charset=utf-8", dataType: "json",
failure: function (response) {
var r = jQuery.parseJSON(response.responseText); alert("Message: " + r.toString());
}
}, null);}
和服务器端使用c#
[WebMethod]
public static string update(string cod)
{
//do.....
return cod+DateTime.Now.ToString();
}