我正在使用这种做法使用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>";
});
}
答案 0 :(得分:1)
您的假设是正确的,您的用户可能会向您的处理程序发出自己的HTTP请求,并提供虚假数据。他们还可以在浏览器中操作页面标记(使用任何开发人员工具栏)并执行相同的操作。
因此,如果您对此感到担心,您将要在服务器端进行一些验证。如果您的应用程序需要身份验证,只需在处理程序的ProcessRequest
方法中查找当前用户的名称,而不是发布它。
我认为这就是你的问题所在。此外,清理您的标记,不推荐使用center
和font
代码。
答案 1 :(得分:0)
如果您需要登录的评论者,而不是检查实际用户(例如,存储在Web服务器上 - 在会话中)。
或者,如果您允许使用未经过身份验证的评论,请考虑使用某些验证码来防止自动请求。