我正在处理包含许多模块的.NET 4.5 Web应用程序(非MVC(。在测试期间,我发现我的应用程序很容易受到反映的跨站点脚本攻击的攻击。
例如,这是我的示例URL的样子:
example.com/abc.aspx?id=1234
现在,如果有人试图输入任何脚本代替ID值,例如。
id=<somescript>
此脚本将被执行。
如何阻止在URL中输入的脚本?目前,我不专注于基于UI的输入元素,例如文本框等。
我需要一种阻止恶意脚本通过URL执行的方法。
我试图启用 valialaterequest 属性。尽管它阻止了脚本在整个应用程序中执行,但有一个问题。它还阻止了在UI基于UI的输入字段(如文本框(中输入的安全标记,从而被执行。
对于我的应用程序,用户期望在TextaReas和Textboxs中输入一些示例标记。
目前,我只想阻止基于浏览器的XSS脚本。我该如何实现?
更新:
我尝试在我的web.config文件中添加以下自定义标头:
X-XSS保护 - 但不受Firefox
的支持content-security-policy-不受IE的支持。
我正在工作的应用程序非常大,因此,出于验证目的,我需要花费很多时间进行代码。有什么办法可以在Web.config级别上进行更改?
您可以尝试将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
在Nuget上可用的替代方案。在web.config
中使用:
<httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary" />
您可以找到有关如何防止XSS攻击此OWASP文章的更多信息。
最佳方法是使用valialaterequest属性,并更改逻辑如何以及为什么在get请求中传递html。也许您只需要传递此文本框的ID或值。