ASP.NET Web窗体中的输出编码安全性问题

问题描述

我正在使用ASP.NET Webforms创建的一些旧版Web应用程序,这些应用程序正在使用Trustwave进行扫描。我们正在使用.NET Framework 4.6。

扫描报告显示我们存在输出编码问题,以下是一些详细信息:

Types of encoding detected:
URL encoding

Unencoded injection string: **CENZIC123 !"#$%&'()*+,-./:;<=>?@[]^_`{|}~\CENZIC456**

Characters that were not encoded in the detection string: !()*-._~
Characters that should have been encoded for URL encoding: ****!()~****

Injection URI: https://mywebsite/Authentication/Login.aspx?CENZIC123%20!%22%23%24%25%26'()*%2B%2C-.%2F%3A%3B%3C%3D%3E%3F%40%5B%5D%5E_%60%7B%7C%7D~%5CCENZIC456

我试图通过将认的HTTP编码器更改为Web.Config内的HTTP运行时节点中的Antixss编码器来解决此问题,如Microsoft文档所建议的那样。但是我仍然在扫描中报告了该问题。

该如何解决

谢谢。

https://docs.microsoft.com/en-us/dotnet/api/system.web.security.antixss.antixssencoder?view=netframework-4.8

解决方法

我遇到了与您有些相似的问题。网关阻止了查询字符串中包含'的请求。这与您的网站设置不太相关,由安全扫描程序报告。

我们的解决方案是将查询字符串编码为Base64,并且网关不再阻塞。在客户端,您可以使用btoa(encodeURIComponent(...))将该字符串编码为base64编码。在服务器端,Convert.FromBase64String(HttpUtility.UrlDecode(base64String))会将其转换回去。