2011-03-31 92 views
1

我正在使用這種做法來添加註釋使用AJAX,通過發送數據到一個ASP.NET處理程序收集信息,然後插入評論,但我恐怕任何人都可以使用它,我錯了!?我如何保護我的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>"; 
     });   
    } 

回答

1

您的假設是正確的,您的用戶可能會向您的處理程序發出自己的HTTP請求,並提供僞造數據。他們還可以在瀏覽器中(使用任何開發人員工具欄)操作頁面標記,並執行相同的操作。

所以,如果你擔心這一點,你會想在你的服務器端做一些驗證。如果您的應用程序需要驗證,只需在處理程序的ProcessRequest方法中查找當前用戶的名稱,而不是發佈它。

認爲這就是你的問題得到。此外,清理標記,centerfont標記已棄用。

0

如果您需要登錄評論者而不是檢查實際用戶(存儲在Web服務器上 - 例如會話中)。

或者如果您允許未經過驗證的評論,請考慮使用某些驗證碼來防止自動請求。

相關問題