1

我正在使用这种做法使用 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>";
        });         
    }
4

2 回答 2

1

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

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

认为这就是您的问题所在。此外,清理您的标记,center标签font已被弃用。

于 2011-03-31T16:24:13.897 回答
0

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

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

于 2011-03-31T18:09:51.820 回答