试图阻止通过URL执行的恶意XSS脚本

时间:2017-04-24 05:36:11

标签: c# asp.net .net-4.5 xss antixsslibrary

我正在开发一个包含大量模块的.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级别进行更改吗?

2 个答案:

答案 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 NuGetweb.config中的用法:

<httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary" />

您可以在this OWASP article上找到有关如何防止XSS攻击的更多信息。

答案 1 :(得分:0)

最好的方法是使用validateRequest属性并更改逻辑在get请求中传递HTML的方式和原因。也许您只需要传递此文本框的ID或值。