未设置 SameSite 限制的敏感 Cookie¶
ID: js/samesite-none-cookie
Kind: problem
Security severity: 5.0
Severity: warning
Precision: medium
Tags:
- security
- external/cwe/cwe-1275
Query suites:
- javascript-security-extended.qls
- javascript-security-and-quality.qls
如果未实施其他 CSRF 防护措施,将 SameSite 属性设置为“None”的身份验证 Cookie 可能被用来执行跨站点请求伪造 (CSRF) 攻击。
将 SameSite 设置为“None”后,第三方网站可以创建包含 Cookie 的授权跨站点请求。此类跨站点请求可以让该网站代表用户执行操作。
建议¶
将所有敏感 Cookie 的 SameSite
属性设置为 Strict
。
示例¶
以下示例将身份验证令牌存储在 SameSite
属性设置为 None
的 Cookie 中。
const http = require('http');
const server = http.createServer((req, res) => {
res.setHeader("Set-Cookie", `authKey=${makeAuthkey()}; secure; httpOnly; SameSite=None`);
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h2>Hello world</h2>');
});
为了防止 Cookie 被包含在跨站点请求中,请将 SameSite
属性设置为 Strict
。
const http = require('http');
const server = http.createServer((req, res) => {
res.setHeader("Set-Cookie", `authKey=${makeAuthkey()}; secure; httpOnly; SameSite=Strict`);
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h2>Hello world</h2>');
});
参考资料¶
MDN Web 文档:SameSite Cookie.
OWASP:SameSite.
常见弱点枚举:CWE-1275.