Asp.net mvc MVC公共操作结果可从URL访问-安全吗?
我已经在MVC中编程几个月了,最近我被要求重新访问我们的授权机制 有一个属性检查用户是否可以访问操作结果,但该属性不会出现在所有公共操作之上。有很多JsonResults和其他ActionResult操作可以从URL栏访问 我的问题是,是否值得将这一属性添加到所有行动结果中Asp.net mvc MVC公共操作结果可从URL访问-安全吗?,asp.net-mvc,security,c#-4.0,data-annotations,Asp.net Mvc,Security,C# 4.0,Data Annotations,我已经在MVC中编程几个月了,最近我被要求重新访问我们的授权机制 有一个属性检查用户是否可以访问操作结果,但该属性不会出现在所有公共操作之上。有很多JsonResults和其他ActionResult操作可以从URL栏访问 我的问题是,是否值得将这一属性添加到所有行动结果中 或者创建某种属性,除非是ajax请求或post,否则不允许访问操作?浏览器请求和ajax请求之间没有功能上的区别,它们都通过相同的http管道。事实上,有时在表单身份验证方案之外执行,因此添加[Authorize]属性也会阻
或者创建某种属性,除非是ajax请求或post,否则不允许访问操作?浏览器请求和ajax请求之间没有功能上的区别,它们都通过相同的http管道。事实上,有时在表单身份验证方案之外执行,因此添加
[Authorize]
属性也会阻止有效请求
我将创建某种授权,需要使用某种类型的头值来区分对Json方法的访问
您可以将头添加到传递的每个ajax请求中,但在Fiddler或Firebug等程序中很容易看到。您可以使用不断变化的授权密钥,但我认为,开销带来的头痛将比您可能试图保护的数据付出更高的成本
您可以使用
[AcceptVerbs(HttpVerbs.Post)]
来装饰您的方法,但同样,可以使用诸如Fiddler或Postman(chrome插件)之类的程序轻松修复这些方法您可以使用Request.IsAjaxRequest
来确保请求来自AJAX请求。这将验证请求中是否存在X-request-With
标题,而通过地址栏发出的请求中不存在该标题
你试图防范的威胁是什么?检查上述内容有助于阻止临时用户阅读您的JsonResult
s,但最终您无法保护publicActionResult
s或JsonResult
s,因为如果有人想要捕获您的响应,他们可以使用以下方式提出自己的请求:
curl——标题“X-request-With:XmlHttpRequest”www.example.com/controller/method
数据非常重要,但不太可能被发现,除非您确实知道自己在寻找什么,否则大多数操作都会使用某种ID作为参数,该参数相当长。[AcceptVerbs(HttpVerbs.Post)]
是否值得添加到此类操作中?或者我应该看看你提到的那些不断变化的授权密钥吗?我想对大多数用户来说,将其限制在POST
就足够了。如果您担心有人“入侵”系统,我将为您的ajax方法研究更深入的安全措施。请确保通过POST
更新任何ajax调用以发出请求,而不是通过GET
对您更改的任何调用进行更新。我们的大多数用户都是临时用户,对编程或黑客没有太多知识。我之所以试图阻止URL栏导航,是因为我遇到几个用户使用URL栏而不是菜单。我猜,如果你知道你在做什么,那么以这种方式导航会更快,例如,你正在尝试访问一些子动作。我没有深入研究这个问题,我只想让这些用户不会以某种方式访问他们不应该使用或看到的操作。