HP Fortify Cookie头操作错误

问题描述 投票:1回答:3

我正在使用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开心的方法。任何帮助,将不胜感激。

c# cookies fortify
3个回答
2
投票

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

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


2
投票

我将代码更改为以下代码,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
}

谢谢


0
投票

在我看来,扩展名[[.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永远无法获取-它只是在过期之前就过期了已创建。
© www.soinside.com 2019 - 2024. All rights reserved.