Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC ajax调用安全问题_C#_Jquery_Ajax_Asp.net Mvc 3 - Fatal编程技术网

C# ASP.NET MVC ajax调用安全问题

C# ASP.NET MVC ajax调用安全问题,c#,jquery,ajax,asp.net-mvc-3,C#,Jquery,Ajax,Asp.net Mvc 3,我正在使用asp.NETMVC3开发应用程序 我通过AniforyToken保护我的页面 假设我在datagrid上面有一个Delete按钮。如果用户单击按钮,ajax调用将把所选项目的id发布到例如国家/删除操作 问题是,用户可以尝试更改请求的id(当他查看源代码页时,他将se$.post(…),这样他就可以删除未选中的国家(在最坏的情况下,他没有权限删除这些国家) 如何保护我的页面免受此攻击?我不想检查删除操作,若用户真的有权删除项目 我听说过一些ajax调用散列,但在MVC中没有找到任何有

我正在使用asp.NETMVC3开发应用程序

我通过AniforyToken保护我的页面

假设我在datagrid上面有一个Delete按钮。如果用户单击按钮,ajax调用将把所选项目的id发布到例如国家/删除操作

问题是,用户可以尝试更改请求的id(当他查看源代码页时,他将se$.post(…),这样他就可以删除未选中的国家(在最坏的情况下,他没有权限删除这些国家)

如何保护我的页面免受此攻击?我不想检查删除操作,若用户真的有权删除项目


我听说过一些ajax调用散列,但在MVC中没有找到任何有用的教程或相关内容。

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

如果您使用post,请使用下面的

[Authorize]
[ValidateAntiForgeryToken]
如果你使用的是一种新方法,那么就使用它吧

[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
}

如果这可以解决您的问题,请记住“标记/勾选”。

如果用户确实有权删除项目,请检查删除操作。这是答案。任何与身份验证、授权、验证或安全性相关的操作都必须在服务器上完成。如果它对OP不有用,那么它可以用于其他应用程序