HP Fortify Header 操作的 Cookie 错误

HP Fortify Cookie Error of Header Manipulation

我正在使用 Fortify 扫描我的代码。它正在识别错误​​ "Header Manipulation: Cookies"。此外它说 "includes unvalidated data in an 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 然后将其发回。 Cookie 不被视为 Fortify 的可信输入,因为它们可以由用户编辑。在将 cookie 添加到响应之前,您可能希望验证 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 扫描以防止 header 操纵:

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

此外,对于这种会立即过期的 cookie(请参阅 DateTime.Now.AddDays(-1)),如果它不是 误报,我有点怀疑,因为这种 cookie 可以永远不会被获取 - 它只是在创建之前就过期了。