Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript修复标头操纵cookie?_Javascript_Cookies_Fortify - Fatal编程技术网

如何使用JavaScript修复标头操纵cookie?

如何使用JavaScript修复标头操纵cookie?,javascript,cookies,fortify,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) );

我的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工具时,它显示以下错误:

CookieSetting()方法在HTTP响应头中包含未验证的数据

这会启用诸如缓存中毒、跨站点脚本、跨用户破坏等攻击 页面劫持cookie操作或打开重定向

在HTTP响应头中包含未验证的数据可以启用缓存中毒跨站点脚本、跨用户破坏、页面劫持、cookie操纵或开放重定向


如何修复此问题?

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

如果他能够在值中插入CR(回车符,也由%0d或\r给出),那么他可以在http请求中添加另一个(因为http头由CR分隔)。 来源:

解决方案A)

我已经调查过了,他们所做的是:

optionsString = ( ( expires ) ? "; domain="+window.location.hostname+";path=/;expires="+expires_date.toGMTString() : "" 
document.cookie = cookieName + '=' + encodeURIComponent( value ) + optionsString;
但是如果您这样做,您将需要相反的方法来获取cookie-getCookie(),在返回值之前执行decodeURIComponent()

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

解决方案B)

清理名称参数

您可以尝试的另一件事是通过escape方法清理您的名字,也许这就是为什么fortify tool会抱怨:

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

Tomor,你能不能编辑我的js函数,这样它就不会改变我的功能。Tomor,这里是你答案中的选项列表?选项字符串是带有cookie选项的字符串-路径、过期等(我已经更新了我的答案)