HP Fortify Cookie头操作错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HP Fortify Cookie头操作错误相关的知识,希望对你有一定的参考价值。

我正在使用Fortify扫描我的代码。它正在识别错误​​“标题处理:Cookies”。进一步说,“在HTTP cookie中包括未验证的数据”。我的代码在下面。

String cookieName = "Foo";
System.Text.RegularExpressions.Regex rgx = new System.Text.RegularExpressions.Regex("[^a-zA-Z0-9 -]");
String FullCookieName = ".OmniPro" + cookieName;
FullCookieName = rgx.Replace(FullCookieName, "");
HttpCookie oldCookie = Request.Cookies[FullCookieName] ;
if ( oldCookie != null )
{
    oldCookie.Expires = DateTime.Now.AddDays( -1 );
    Response.Cookies.Add( oldCookie );
}

错误在“ Cookies.Add”上被标识。我的意图是使旧的cookie过期。我找不到让Fortify开心的方法。任何帮助,将不胜感激。

答案

问题是取出旧的Cookie,然后将其发送出去。 Cookies不被视为Fortify的受信任输入,因为它们可以由用户进行编辑。您可能需要先验证Cookie内的内容,然后再将其添加到响应中。即使执行此操作,Fortify仍可能会报告该问题。在进行输入验证时,Fortify本质上不信任您的验证。为此,您必须创建一个自定义规则。一旦您认为输入已被充分净化,您也可以解决此问题。

Fortify在https://protect724.hp.com有一个用户社区,该社区也受到支持人员的监视。您可以在那里获得更快的答案。

另一答案

我将代码更改为以下代码,Fortify接受了。

String cookieName = "Foo"
System.Text.RegularExpressions.Regex rgx = new System.Text.RegularExpressions.Regex("[^a-zA-Z0-9 -]");
String FullCookieName = ".OmniPro" + cookieName;
HttpCookie oldCookie = Request.Cookies[FullCookieName];
if (oldCookie != null)
{
    String DeleteCookieName = rgx.Replace(FullCookieName, "");
    HttpCookie expiredCookie = new HttpCookie(DeleteCookieName) { Expires = DateTime.Now.AddDays(-1) };
    HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
}

谢谢

另一答案

在我看来,扩展名[[.OmniPro有一个非常特定的用例,我不怀疑。但是,正则表达式似乎不是必需的。

更简单的代码通过了HP的Fortify扫描以防止标题操纵:

HttpCookie expiredCookie = new HttpCookie(DeleteCookieName) { Expires = DateTime.Now.AddDays(-1) }; HttpContext.Current.Response.Cookies.Add(expiredCookie); // Overwrite cookie.

此外,对于那些即将过期的cookie(请参阅DateTime.Now.AddDays(-1)),我不是持怀疑态度,因为它不是

false positive

,因为该cookie永远无法获取-它只是在过期之前就过期了已创建。

以上是关于HP Fortify Cookie头操作错误的主要内容,如果未能解决你的问题,请参考以下文章

HP fortify XML 外部实体注入

HP Fortify 规则抑制属性 C#

HP Fortify -- 注释方法参数

更改 HP Fortify C 规则优先级

HP Fortify:ASP.NET 不良做法:存储在会话中的不可序列化对象

如何基于Fortify扫描结果使TFS构建失败