asp.net中的跨站点脚本编写以及如何防止

时间:2018-08-28 04:42:34

标签: c# asp.net webforms xss

我最近在一个基于asp.net Webforms的网站上使用了漏洞扫描程序,该网站正在使用框架4.5。

该网站被标记为多个漏洞,并且大多数与跨站点脚本XSS相关。下面是一个这样的例子

示例1:

警报组:跨站点脚本

详细信息:URI设置为n < m,输入为 反映在单引号之间的标记参数内。

  • GET //?''onmouseover ='8HLr(9179)'bad ='HTTP / 1.1
  • 推荐人:https://example.com/连接:保持活动状态
  • 接受: /
  • 接受编码:gzip,压缩主机:example.com
  • 用户代理:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.21 (KHTML,例如Gecko)Chrome / 41.0.2228.0 Safari / 537.21

示例2:

警报组:跨站点脚本

详细信息:URL编码的POST输入ctl00 $ txtSearch设置为“ onmouseover = 8qGf(9096)”  输入反映在单引号之间的tag参数内。

  • 获取/ search / the'onmouseover = 8qGf(9096)'HTTP / 1.1
  • 推荐人:https://example.com/连接:保持活动状态
  • 接受: /
  • 接受编码:gzip,压缩主机:domain.com
  • 用户代理:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.21 (KHTML,例如Gecko)Chrome / 41.0.2228.0 Safari / 537.21

示例3:

警报组:跨站点脚本

详细信息:URI设置为'onmouseover ='gPIH(9411)'bad ='

输入反映在单引号之间的标记参数内。

  • / blog / 1234 / blog标题?'onmouseover ='gPIH(9411)'bad ='HTTP / 1.1
  • 推荐人:https://example.com/连接:保持活动状态
  • 授权:基本YW5vbnltb3VzOmFub255bW91cw ==
  • 接受: /
  • 接受编码:gzip,压缩主机:domain.com
  • 用户代理:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.21 (KHTML,例如Gecko)Chrome / 41.0.2228.0 Safari / 537.21

在本地主机上进行的白色测试我将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攻击,或者我们需要做更多的事情。

1 个答案:

答案 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编码。