我正在研究asp.net mvc应用程序。我几乎没有回复json的行动。使用Jquery ajax调用调用这些操作。
本网站不需要身份验证。任何匿名用户都可以访问该网站。我担心人们只是调用动作并执行DOS攻击。
我们有什么方法可以阻止人们直接访问该行动?
谢谢。
答案 0 :(得分:4)
我认为您可以使用AntiForgeryToken
,
在您的视图中,您需要令牌以便JavaScript可用。添加以下行,上面的javascript只使用常见的HTML-Helper。
@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 Anti-CSRF机制。像
[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public JsonResult YourMethod(string param)
{
// do whatever
return Json(true);
}