当前位置: 首页 > 知识库问答 >
问题:

如何修复“HTTP标头中CRLF序列的不正确中和('HTTP响应拆分')”

刘瑞
2023-03-14

运行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);可以使用什么修复来消除该错误?

谢谢的

共有3个答案

茅星华
2023-03-14

它看起来像是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

  • 隆选
    2023-03-14

    我认为问题是因为线路

    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)

    丁阳炎
    2023-03-14

    消除此问题的最简单方法是使用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应该是解决方案,但我仍然有这个缺陷?我错过了什么?任何提示都将不胜感激!