使用ajax发布html数据时出现内部服务器错误

时间:2018-01-20 19:15:31

标签: javascript asp.net ajax

如果用户输入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>

1 个答案:

答案 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();
     }