ASP.NET MVC ajax 调用安全问题

本文关键字:安全 问题 调用 ajax NET MVC ASP | 更新日期: 2023-09-27 18:36:13

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

我通过 aniforgerytoken 保护我的页面免受 CSRF 的影响。

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

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

如何保护我的页面免受这种情况的影响?如果用户确实有权删除项目,我不想检查删除操作。

我听说过一些 ajax 调用哈希,但没有在 MVC 中找到任何有用的教程或可以做到这一点的东西。

ASP.NET MVC ajax 调用安全问题

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

如果您

使用的是帖子,请使用以下内容

[Authorize]
[ValidateAntiForgeryToken]

如果您使用的是 get use

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

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