运行VeraCode后,它在以下代码片段中报告了以下错误“HTTP头中CRLF序列的不正确中和('HTTP响应拆分”):
protected override void InitializeCulture() {
//If true then setup the ability to have a different culture loaded
if (AppSettings.SelectLanguageVisibility) {
//Create cookie variable and check to see if that cookie exists and set it if it does.
HttpCookie languageCookie = new HttpCookie("LanguageCookie");
if (Request.Cookies["LanguageCookie"] != null)
languageCookie = Request.Cookies["LanguageCookie"];
//Check to see if the user is changing the language using a query string.
if (Server.UrlDecode(Request.QueryString["l"]) != null)
languageCookie.Value = Server.UrlDecode(Request.QueryString["l"]);
//Check to make sure the cookie isn't null and set the culture variable to auto if it is and the value of the cookie if it isn't.
if (languageCookie.Value == null)
languageCookie.Value = string.Empty;
string culture = languageCookie.Value.ToString();
if (string.IsNullOrEmpty(culture))
culture = "Auto";
//Use to set the Culture and UI Culture.
this.UICulture = culture;
this.Culture = culture;
if (culture != "Auto") {
//If culture is changed set the new Current Culture and CurrentUICulture.
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(culture);
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
}
//Update the cookie value with the new culture and initialize the culture.
Response.Cookies.Set(languageCookie);
Response.Cookies["LanguageCookie"].Expires = DateTime.Now.ToLocalTime().AddYears(1);
Response.Cookies["LanguageCookie"].HttpOnly = true;
}
else {
//Else keep language as English if localization is not enabled.
this.UICulture = "en";
this.Culture = "en";
}
base.InitializeCulture();
}
报告指向包含以下代码的行:Response。饼干。Set(languageCookie);可以使用什么修复来消除该错误?
谢谢的
它看起来像是ASP的假阳性。当配置选项EnableHeaderChecking为true(默认值)时,Net将自动检查响应标头并对CRLF字符进行编码。自的2.0版开始提供。Net框架,还将保护响应标头不受cookie名称中存在的CRLF字符的影响。
参考文献:
>
https://docs.microsoft.com/en-us/dotnet/api/system.web.configuration.httpruntimesection.enableheaderchecking?view=netframework-4.6.2
https://referencesource.microsoft.com/#System.Web/HttpHeaderCollection.cs, e201dcca44935c73
我知道扫描仪不能相信服务器设置是正确的,所以我用一个函数替换了cookie名称中使用的字符串中的任何CRLF字符,但Veracode根本不接受它。
扫描仪似乎只接受预定义实用程序列表中的消毒代码。我从一些认可的实用程序中使用URLEncode(它将对CRLF字符进行编码)进行了很多测试,但没有成功。
参考文献:
>
https://help.veracode.com/reader/4EKhlLSMHm5jC8P8j3XccQ/IiF_rOE79ANbwnZwreSPGA
我认为问题是因为线路
languageCookie.Value = Server.UrlDecode(Request.QueryString["l"]);
接受(不受信任的)用户输入(即请求。查询字符串[l])。尝试添加函数调用以删除任何回车符或换行符(包括其编码等价物,如
和 将查询字符串参数存储在languageCookie中之前。
例如,您可以尝试将该行更改为:
languageCookie.Value = Server.UrlDecode(Request.QueryString["l"])
.Replace("\r", string.Empty)
.Replace("%0d", string.Empty)
.Replace("%0D", string.Empty)
.Replace("\n", string.Empty)
.Replace("%0a", string.Empty)
.Replace("%0A", string.Empty);
尽管这可能需要清理一下(我现在不是C#程序员)。
参见也
http://en.wikipedia.org/wiki/HTTP_response_splitting
http://www.securiteam.com/securityreviews/5WP0E2KFGK.html
https://www.owasp.org/index.php/Testing_for_HTTP_Splitting/Smuggling_(OWASP-DV-016)
消除此问题的最简单方法是使用ESAPI jar中的ESAPI httputilities。您可以使用
ESAPI.httpUtilities().setHeader(response,param,value);
ESAPI.httpUtilities().addCookies(response, param,value);
和其他任务的类似方法。你需要ESAPI。在类路径中设置的属性。这是我们为Java实现的方式。其他语言也有相同的功能。
不需要额外的工作,它将解决veracode中的问题。
运行veracode扫描后,我得到了CWE 113错误。我已经找到了替换cookie值的解决方案,但问题仍然没有解决。 修复CWE-113:HTTP标头中CRLF序列的不正确中和(“HTTP响应拆分”) 我该如何解决这个问题?
R之后 描述-函数调用包含HTTP响应分割漏洞。将未经初始化的用户提供的输入写入HTTP标头允许攻击者操纵浏览器呈现的HTTP响应,从而导致缓存中毒和跨站点脚本攻击。
我在我的项目上运行了Veracode扫描,它在HTTP响应拆分下给了我CWE ID 113问题。我试图用这些建议来解决这个问题,但没有成功。例如 上面的代码来自其中一个文件。并报告显示行错误 有什么建议,如何解决这个问题?
任何人都知道如何解决这个veracode问题(CWE 113) 我已经尝试了下面的链接,但它不工作。 修复CWE-113:HTTP标头中CRLF序列的不正确中和(“HTTP响应拆分”) 下面是我遇到问题的函数。
我已经通过了这个链接。[如何修复“HTTP标头中CRLF序列的不正确中和('HTTP响应拆分')” 但它并没有给我解决方案。 我的代码也给出错误“HTTP标头中CRLF序列的不正确中和('HTTP响应拆分') 我的代码片段是: 在veracode扫描中,最后一行出现错误。不知道该怎么办。
此代码: 尽管我用s=s.replace删除了s中任何不需要的字符串,但仍然给了我CWE ID 93。在示例中,我发现了一个web,s=s.replace应该是解决方案,但我仍然有这个缺陷?我错过了什么?任何提示都将不胜感激!