HP强化标头操作的Cookie错误

时间:2015-03-25 13:53:44

标签: c# cookies fortify

我正在使用Fortify来扫描我的代码。它识别错误"标题操作:Cookie"。此外,它说"包括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高兴。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

由于

答案 1 :(得分:0)

问题在于使用旧cookie然后将其发回。 Cookie不被视为Fortify的可信输入,因为它们可由用户编辑。在将cookie添加到响应之前,您需要验证cookie中的内容。即使你这样做,Fortify仍然可能会报告这个问题。在进行输入验证时,Fortify不信任您的验证。您必须创建自定义规则才能执行此操作。一旦您认为输入被充分消毒,您也可以解决问题。

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

答案 2 :(得分: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)),如果它不是误报,我会有些怀疑,因为永远无法获取此cookie-只是在创建之前就过期了。