2017-03-10 136 views
0

我想阻止每个包含未知参数的请求。MVC全局方法安全

例如,

本地主机/应用/主页/索引或者

本地主机/应用/主页/指数?模块=管理员

就可以访问我的索引页。

但一个请求应块包含未知参数等,

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

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

我做了什么?

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

我可以创建一个过滤器来检查请求,如果它发现任何未知参数,请求将被重定向到通用错误页面。

任何帮助或想法将不胜感激?

+0

你为什么想这样做?你在哪里看到潜在的风险?可能有更好的方法来做到这一点。 – thmshd

+0

@ thomashaid.com:你能给我举一个例子吗?/ – Bharat

+0

这取决于你的安全问题。在你的眼中,如果你不过滤掉应用程序会发生什么? – thmshd

回答

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(); 
} 
+0

让我把它添加到我的系统.. – Bharat

+0

@Bharat伟大 - 让我知道你如何得到 – scgough