url内的双转义序列:请求过滤模块configuration为拒绝包含双转义序列的请求
在我的ASP.NET MVC应用程序中,我试图实现如下的URL:
/产品/标签/为+家庭
当我尝试使用默认configuration运行我的应用程序时,我收到404.11响应代码的消息:
HTTP错误404.11 – 未find
请求过滤模块被configuration为拒绝包含双转义序列的请求。
我可以通过在我的web.config中实现下面的代码来解决这个错误:
<system.webServer> <security> <requestFiltering allowDoubleEscaping="true" /> </security> </system.webServer>
所以,现在我没有得到任何404.11
。
我想知道的是,这个实现打开了什么样的安全漏洞。
顺便说一句,我的应用程序是在.Net Framework 4.0
和IIS 7.5
下运行。
您可能会打开的安全漏洞与代码注入有关 – HTML注入,JavaScript注入或SQL注入。
默认设置不允许共同的注入策略工作,从而使您免于半有效的攻击。 您删除的默认安全性越高,您就越需要考虑通过URL,GET请求查询string,POST请求数据,HTTP标头等提供的input操作。
例如,如果您正在基于您的操作方法的id
参数构builddynamicSQL查询,如下所示:
public ActionResult Tags(string id) { var sql = "SELECT * FROM Tags Where tagName = '" + id + "'"; // DO STUFF... }
(…这不是一个好主意),.NET框架中的默认保护可能会阻止一些更危险的场景,比如请求这个URL的用户:
/product/tags/1%27;drop%20table%20Tags;%20--
整个想法是把每一部分url和其他input的行动方法都视为可能的威胁。 默认安全设置确实为您提供了一些保护。 您更改的每个默认安全设置打开一个更多的潜在的不良情况,你需要手动处理。
当然,我假设你不是这样构buildSQL查询的。 但是,当你将用户input存储在数据库中,然后再显示它们时,就会有更多的偷偷摸摸的东西出现。 恶意用户可能会在您的数据库中存储未经编码的JavaScript或HTML,从而威胁系统的其他用户。
- 我可以closures模拟,只是在几个实例
- 内置的帮助器将User.Identity.Nameparsing为Domain \ Username
- 在web.config中的SQL providerName
- 在asp.net mvc视图中将string显示为html
- asp.net asmx Web服务返回XML而不是JSON
- 我可以在加载事件中从C#中的div标签dynamic添加HTML吗?
- types之后的问号的目的是什么(例如:int?myVariable)?
- 如何使用Selenium RC运行Google Chrome?
- ASP.NET MVC 5与AngularJS / ASP.NET WebAPI