2

我正在研究 asp.net mvc 应用程序。我很少有返回 json 的操作。这些操作是使用 Jquery ajax 调用来调用的。

该网站不需要身份验证。任何匿名用户都可以访问该网站。我担心人们只是调用这些动作并执行 DOS 攻击。

有什么方法可以阻止人们直接访问该操作?

谢谢你。

4

1 回答 1

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);
}
于 2013-05-27T13:52:17.233 回答