我正在使用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高兴。任何帮助将不胜感激。
答案 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-只是在创建之前就过期了。