我想知道为什么不能使用 setRequestHeader 设置 cookie 标头。是否有任何特定原因或只是它们是由浏览器本身添加的,所以这些标头被禁用了?有什么安全问题吗?
- 编辑
我正在使用 node.js 并使用 xmlhttprequest
模块。以下是测试代码:
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.withCredentials = true;
xhr.setRequestHeader('Cookie', "key=value");
xhr.send(null);
在这里,我需要将 cookie-header 设置为 node.js' xmlhttprequest
不要显式添加 cookie-header(如浏览器那样)。尝试这样做时, xmlhttprequest
给出错误“ Refused to set unsafe header
”。
虽然我找到了一个补丁并成功地发送了 cookie-header。但是想知道为什么它被禁用设置 cookie-header?无论我在哪里阅读,都发现它是数据完整性和安全性所必需的,但是在这种情况下可以破坏什么安全性,却没有提到。我想评估这个数据完整性问题是否对 node.js 应用程序也有效,如果我使用我的补丁。
原文由 jsist 发布,翻译遵循 CC BY-SA 4.0 许可协议
我相信你会仔细阅读 工作草案 并找到
首先我们需要了解,这些是作为不同浏览器之间功能互操作性指南的标准。它不是浏览器强制要求的,因此浏览器确实出于不同的原因对该标准的遵守程度不同。
其次,从技术上讲,您可以模拟用户代理,将您的程序视为浏览器,并且可以根据上述标准很好地设置这些值。
最后,禁止重写标题或为某些字段设置标题的意图,例如
Content-Length
,Cookie
ethos thesecure design approach
它是为了阻止或至少试图阻止 HTTP 请求走私。