javascript - 如何使用 JavaScript 修复标题操作 cookie?

标签 javascript cookies fortify

我的 JavaScript 代码:

function CookieSetting(name, value) {
    var today = new Date();
    today.setTime( today.getTime() );
    var expires = 28;
    expires = expires * 1000 * 60 * 60 * 24;
    var expires_date = new Date( today.getTime() + (expires) );
    document.cookie = name+"="+escape( value ) +
    ( ( expires ) ?";
   domain="+window.location.hostname+";path=/;expires="+expires_date.toGMTString() : "" )
}

它工作正常,但是当我运行 Fortify 工具时,它显示此错误:

The method CookieSetting() includes unvalidated data in an HTTP response header.

This enables attacks such as cache-poisoning cross-site scripting cross-user defacement page hijacking cookie manipulation or open redirect.

Including unvalidated data in an HTTP response header can enable cache-poisoning cross-site scripting, cross-user defacement, page hijacking, cookie manipulation or open redirect.

我该如何解决这个问题?

最佳答案

问题是,如果值来自用户输入,他就可以攻击您的 http header 。

如果他能够将 CR(回车,也由 %0d 或\r 给出)插入,那么他就可以将另一个headers 添加到您的 http请求(因为 http header 由 CR 分隔)。 来源:Nice web article about those attacks .

解决方案 A)

我调查过并 existing implementation of javascript setCookie他们所做的是:

optionsString = ( ( expires ) ? "; domain="+window.location.hostname+";path=/;expires="+expires_date.toGMTString() : "" 
document.cookie = cookieName + '=' + encodeURIComponent( value ) + optionsString;

但是如果您这样做,您将需要相反的方法来获取 cookie - getCookie(),您将在返回值之前执行 decodeURIComponent()

我会尝试通过 encodeURIComponent() 方法清理您的值。

解决方案 B)

清理name参数

您可以尝试的另一件事是通过转义方法清理您的名字,也许这就是强化工具提示的原因:

document.cookie = window.escape(name)+"="+window.escape(value) + ...

关于javascript - 如何使用 JavaScript 修复标题操作 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498921/

相关文章:

Angular 4 基于 cookie 的身份验证

javascript - cookie "_shopify_country"来自哪里?

java - 强化扫描仪输出

c++ - 在 Qt 代码上使用 Fortify SCA(未过时 "HP Fortify")

CodeIgniter 延长用户的 session 过期时间

javascript - 从 firebug 控制台调用自定义函数

更改函数名称的javascript代码

javascript - 将 HTML 环绕在文本周围

java - 运行 Fortify 3.7.0 时为 "failure starting java"

javascript - 克隆元素更改事件行为