MVC全球方法安全

时间:2017-03-10 06:50:12

标签: asp.net-mvc

我想阻止包含未知参数的每个请求。

例如,

localhost / application / Home / Index

localhost / application / Home / Index?Module = Admin

将允许访问我的索引页面。

但请求应该是包含未知参数的块,例如

本地主机/应用/主页/索引/?fakeParam =%24 {76428%2b66104%2B%27f60cec015d33e6f70fc90789dd6659ff6b83da4d49f58d1fb7d1f0ae210ff7a8de500d534018c03aa77a440178e47b9e9dc66b53afa119163810502c2d1946f2%27}

此时此查询还允许用户访问我的索引页。

我做了什么?

我试图通过方法级别的参数获取请求并阻止它,但我认为这对整个应用程序来说并不容易。

我是否可以创建一个检查请求的过滤器,如果找到任何未知参数,请求将被重定向到一般错误页面。

任何帮助或想法都会受到赞赏吗?

1 个答案:

答案 0 :(得分:1)

您可以创建一个新的动作过滤器并将其应用于控制器。这是一个粗略的大纲。

另见:https://msdn.microsoft.com/en-us/library/dd410056(v=vs.98).aspx 并且:https://msdn.microsoft.com/en-us/library/dd410209.aspx

所以:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new MyQuerystringFilterAttribute()); //Add this
}

然后,添加一个新类:

public class MyQuerystringFilterAttribute : ActionFilterAttribute
{
    //fires before the action is executed
    public override void OnActionExecuting(ActionExecutingContext 
filterContext)
    {
        // The action filter logic checking querystring and blocking if necessary
    }
}

然后,在您的控制器中(在控制器级操作:

[MyQuerystringFilter]
public ActionResult Home() {
    return View();
}