我最近在一个基于asp.net Webforms的网站上使用了漏洞扫描程序,该网站正在使用框架4.5。
该网站被标记为多个漏洞,并且大多数与跨站点脚本XSS相关。下面是一个这样的例子
示例1:
警报组:跨站点脚本
详细信息:URI设置为n < m
,输入为
反映在单引号之间的标记参数内。
示例2:
警报组:跨站点脚本
详细信息:URL编码的POST输入ctl00 $ txtSearch设置为“ onmouseover = 8qGf(9096)” 输入反映在单引号之间的tag参数内。
示例3:
警报组:跨站点脚本
详细信息:URI设置为'onmouseover ='gPIH(9411)'bad ='
输入反映在单引号之间的标记参数内。
在本地主机上进行的白色测试我将XXS注入了本地URL 'onmouseover='8HLr(9179)'bad='
并在页面上生成错误
从以下位置检测到潜在危险的Request.Path值: 客户(<)。
这是否意味着我的页面不容易受到XSS的攻击,并且在asp.net网络表单中对XSS进行了进一步调查之后,我发现很少有文章谈到正在进行的敏感输入。
一个示例,表明可以通过在web.config文件中设置以下内容来轻松完成xss
http://localhost:54923/%3Cscript%3Ealert('hello!');%3C/script%3E
来源/:https://code.tutsplus.com/tutorials/preventing-xss-in-aspnet--cms-21801
是否已设置<httpRuntime requestValidationMode="2.0" />
<httpRuntime requestValidationMode="4.5" />
足以防止如上所述的XSS攻击,或者我们需要做更多的事情。
答案 0 :(得分:0)
XSS保护不依赖请求验证:- 请求验证是可取的,但不应用作XSS保护的唯一方法,并且不能保证捕获所有类型的无效输入。我看到您只为GET方法保护页面,但是如果必须使用“ Forms”(使用POST方法)发布页面,则必须使用ValidateAntiForgeryToken属性来真正保护您的方法和表单不被其他应用程序调用。一个带有[ValidateAntiForgeryToken]属性的属性,它将确保您的表单包含带有有效令牌的适当代码。这是示例代码
@using (Html.BeginForm())
{
@Html.AntiForgeryToken();
@Html.EditorForModel();
<input type="submit" value="Submit" />
}
[HttpPost]
[ValidateAntiForgeryToken()]
public ActionResult Index(User user)
{
...
}
在相关的地方也使用编码。如果您使用的是Razor视图引擎,则所有输出均已HTML编码。