如何使用JavaScript修复标头操纵cookie?
我的JavaScript代码:如何使用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) );
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选项的字符串-路径、过期等(我已经更新了我的答案)