2013-05-27 92 views
2

我正在處理asp.net mvc應用程序。我有幾個返回json的動作。這些操作使用Jquery ajax調用進行調用。asp.net mvc - 如何停止正在調用的操作方法

本網站不需要驗證。任何匿名用戶都可以訪問該網站。我擔心人們只是在調用這些操作並執行DOS攻擊。

有什麼辦法可以阻止人們直接訪問該操作?

謝謝。

+0

你可以拒絕'HttpGet'爲JSON Action方法並且只允許'Post'。在MVC中嘗試一些類似AntiForgeryToken的事情。 – Saravanan

+1

如果這些請求在您的Web應用程序中使用並公開顯示,則直接或通過您的Web應用程序調用這些服務沒有任何區別。 –

+0

我對'AntiForgery'沒有多少了解。但是發現了很多鏈接來實現這一點。我希望下面的鏈接將幫助你。 [參考](http://dotnetslackers.com/articles/aspnet/Protect-ASP-NET-MVC-3-Applications-Using-AntiForgery-Helpers.aspx)(http://stackoverflow.com/questions)/1402770 /什麼是使用反僞造令牌鹽) – Amit

回答

4

我認爲你可以使用AntiForgeryToken

在你看來,你所需要的令牌,以便它是提供給JavaScript.Add以下線以上的JavaScript只是使用普通的HTML助手。

@Html.AntiForgeryToken() 

其附加到你的Ajax請求,這樣你就不必重複自己

$(document).ready(function() { 
    var securityToken = $('[name=__RequestVerificationToken]').val(); 
    $('body').bind('ajaxSend', function (elm, xhr, s) { 
     if (s.type == 'POST' && typeof securityToken != 'undefined') { 
      if (s.data.length > 0) { 
       s.data += "&__RequestVerificationToken=" + encodeURIComponent(securityToken); 
      } 
      else { 
       s.data = "__RequestVerificationToken=" + encodeURIComponent(securityToken); 
      } 
     } 
    }); 
}); 

而且在你控制器只需添加標準ASP.Net MVC反CSRF機制。像

[HttpPost] 
[Authorize] 
[ValidateAntiForgeryToken] 
public JsonResult YourMethod(string param) 
{ 
    // do whatever 
    return Json(true); 
} 
相關問題