我正在开发一个包含大量模块的.NET 4.5 Web应用程序(非MVC)。 在测试时,我发现我的应用程序容易受到Reflected Cross Site Scripting攻击。
例如,这就是我的示例网址:
example.com/abc.aspx?id=1234
现在,如果有人试图输入任何脚本代替id值,例如
id=<somescript>
这个脚本会被执行。
如何阻止在URL中输入的脚本被执行? 目前我并不专注于基于UI的输入元素,如文本框等。
我需要一种方法来阻止恶意脚本通过URL执行。
我尝试启用 validateRequest 属性。虽然它阻止脚本在整个应用程序中执行但是它有一个问题。 它还阻止了在基于UI的输入字段(如文本框)中输入的安全标记的执行。
对于我的应用程序,用户希望在textareas和textbox中输入一些示例标记。
目前我只想阻止基于浏览器URL的XSS脚本。我怎样才能实现它?
更新
我尝试在我的web.config文件中添加以下自定义标头:
X-Xss-Protection - 但Firefox不支持它
Content-Security-Policy - IE不支持。
我正在使用的应用程序非常大,因此我需要花费大量时间来更改代码以进行验证。 有什么办法可以在Web.config级别进行更改吗?
答案 0 :(得分:1)
您可以尝试将System.Web.Security.AntiXss.AntiXssEncoder
(自.NET 4.5以来可用)设置为ASP.NET应用程序的默认编码器。
它对要在URL,HTML,CSS或XML字符串中使用的字符串进行编码。
web.config
中的用法:
<httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder" />
早期版本的.NET还有一种替代方法:Microsoft.Security.Application.AntiXssEncoder
可用on NuGet。 web.config
中的用法:
<httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary" />
您可以在this OWASP article上找到有关如何防止XSS攻击的更多信息。
答案 1 :(得分:0)
最好的方法是使用validateRequest属性并更改逻辑在get请求中传递HTML的方式和原因。也许您只需要传递此文本框的ID或值。