-1

我正在使用 asp.net mvc3 开发应用程序。

我通过 anifgerytoken 保护我的页面反对 CSRF。

想象一下,我在数据网格上方有删除按钮。如果用户单击按钮,ajax 调用会将所选项目的 id 发布到例如国家/删除操作。

问题是,该用户可以尝试更改请求的 ID(当他查看源代码页面时,他会查看 $.post(...)),因此他可以删除未选择的国家/地区(在最坏的情况下,为他没有权限删除它们)

我怎样才能保护我的网页呢?如果用户真的有权删除项目,我不想检查删除操作。

我听说过一些 ajax 调用散列,但没有找到任何有用的教程或在 MVC 中做这件事的东西。

4

2 回答 2

0

我认为您不需要在客户端做任何事情。相反,您应该在服务器端检查用户是否有权删除选择删除的国家/地区,并且仅删除他们有权删除的国家/地区。

于 2013-10-21T17:34:46.677 回答
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
}

如果这能解决您的问题,请记住“标记/打勾”。

于 2017-08-25T07:33:44.503 回答