2013-10-21 89 views
-1

我正在使用asp.net mvc3來開發應用程序。ASP.NET MVC Ajax調用安全問題

我通過aniforgerytoken保護我的頁面agaings CSRF。

想象一下,我有數據網格上面的刪除按鈕。如果用戶點擊按鈕,ajax調用會將選定項目的ID發送到例如Countries/Delete操作。

問題是,該用戶可以嘗試更改請求的ID(當他查看源代碼頁時,他會se $ .post(...)),因此他可以刪除未選中的國家(位於最壞的情況下,他沒有權限刪除它們)

如何保護我的網頁againts這?我不想檢查刪除操作,如果用戶真的有權刪除項目。

我聽說過一些ajax調用哈希,但沒有找到任何有用的教程或在MVC中做的事情。

+1

「_check on delete action,if user really have right right to items items._」這就是答案。任何與身份驗證,授權,驗證或安全相關的事項都必須在服務器上完成。 –

回答

0

我不認爲你需要在客戶端做任何事情。相反,您應該檢查服務器端是否有權刪除選定要刪除的國家/地區,並且只刪除那些有權刪除的國家/地區。

0

如果您使用的是後使用下面

[Authorize] 
[ValidateAntiForgeryToken] 

如果您使用的是GET使用

[Authorize] 

您還可以使用下面

public class HttpAjaxRequestAttribute : ActionMethodSelectorAttribute 
{ 
    public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo) 
    { 
     if (!controllerContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      throw new Exception("This action " + methodInfo.Name + " can only be called via an Ajax request"); 
     } 
     return true; 
    } 
} 

那麼這個自定義屬性,裝飾你的動作如下

[Authorize] 
[HttpAjaxRequest] 

public ActionResult FillCity(int State) 
{ 
    //code here 
} 

如果這能解決您的問題,請記住「標記/打勾」。

+0

如果這能解決您的問題,請記住「標記/打勾」。 - 認真嗎?這個問題已經差不多4年前了,OP在2016年最後一次出現...... – jps

+0

如果它對於OP沒有用處,它可以用於其他 – MaxyDav