如何保护我的asp.net Handler页面

时间:2011-03-31 16:16:30

标签: asp.net ajax handlers

我正在使用这种做法使用AJAX添加注释,通过将数据发送到收集信息然后插入注释的ASP.NET处理程序,但我担心任何人都可以使用它,我错了! ?

    //AddComment.ashx
    public void ProcessRequest (HttpContext context) {
    CommentsDB db = new CommentsDB();
    db.InsertComment(new Comment(context.Request["name"].ToString(), context.Request["comment"].ToString(), "no", int.Parse(context.Request["id"].ToString())));

    context.Response.ContentType = "text/plain";
    context.Response.Write("succeed");
}

        //Comments.js
        function AddComment()
    {
        n = document.getElementById('txtName').value;
        c = document.getElementById('txtComment').value;
        i = document.getElementById('ctl00_ContentPlaceHolder1_thread').value;
        m = document.getElementById('ctl00_ContentPlaceHolder1_Label1');
        if(n == "" || c == "" || n.length > 100 || c.length > 400)
        {
            m.innerHTML = "<center><font color=black size=3><b><font color=red>*</font> An error has occurred</b></font></center><br>";
            return;
        }
        m.innerHTML = "";
        document.getElementById('btn').disabled = true;
        $.post("./Handlers/AddComment.ashx", {'name':n, 'comment':c, 'id':i}, function(Response){
            m.innerHTML  = "<center><font color=black size=3><b>accepted</b> <img src=./Images/success-icon.png></font></center><br>";
        });         
    }

2 个答案:

答案 0 :(得分:1)

您的假设是正确的,您的用户可能会向您的处理程序发出自己的HTTP请求,并提供虚假数据。他们还可以在浏览器中操作页面标记(使用任何开发人员工具栏)并执行相同的操作。

因此,如果您对此感到担心,您将要在服务器端进行一些验证。如果您的应用程序需要身份验证,只需在处理程序的ProcessRequest方法中查找当前用户的名称,而不是发布它。

认为这就是你的问题所在。此外,清理您的标记,不推荐使用centerfont代码。

答案 1 :(得分:0)

如果您需要登录的评论者,而不是检查实际用户(例如,存储在Web服务器上 - 在会话中)。

或者,如果您允许使用未经过身份验证的评论,请考虑使用某些验证码来防止自动请求。