Cookie是Web应用为了维持用户会话状态的,但Cookie安全性直接关系到用户账户与敏感数据的安危。HttpOnly和Secure是两种至关重要的Cookie安全属性,用于缓解跨站脚本(XSS)攻击和中间人攻击(MitM)的风险。
HttpOnly是指示浏览器禁止客户端脚本(如JavaScript)通过document.cookieAPI访问该Cookie。
HttpOnly的作用:极大程度上缓解XSS攻击的impact。即使网站存在XSS漏洞,攻击者也无法通过注入的脚本直接窃取标记为HttpOnly的Cookie(如SessionID),从而无法劫持用户会话。它是最重要、最基础的Cookie防护。
Secure是指示浏览器仅通过加密的HTTPS连接来发送该Cookie。在非加密的HTTP请求中,浏览器绝不会发送带有Secure属性的Cookie。
Secure作用:防止网络窃听者(如处于同一公共WiFi的攻击者)通过明文传输的流量轻松截获用户的会话Cookie。它要求整个网站必须全站HTTPS才能生效。
测试应覆盖Cookie的设置、传输、存储全过程。
手动检测-Cookie属性验证,这是最直接和基础的测试方法。
触发Cookie设置:正常访问网站,完成登录等会触发服务端设置Cookie的操作。
检查响应头(Set-Cookie):
打开浏览器开发者工具(F12),切换到“网络”(Network)标签页。
刷新页面或重新执行操作,在网络请求列表中,找到由服务器返回的响应(通常是登录请求或第一个文档请求)-。
点击该请求,查看“响应头”(ResponseHeaders)部分,找到Set-Cookie头。
验证:检查Set-Cookie头中是否包含HttpOnly和Secure标志。
示例:Set-Cookie:sessionId=apc123;path=/;expires=Mon,21Oct202405:00:00GMT;HttpOnly;Secure;SameSite=Lax;
检查存储的Cookie(可选验证):
在开发者工具中,切换到“应用程序”(Application)或“存储”(Storage)标签页。
在左侧导航栏中找到“Cookie”并展开,选择目标网站的域名。
右侧会列出所有当前存储的Cookie及其属性(HttpOnly、Secure、SameSite等)。
验证:确认关键的会话Cookie在此处的“HttpOnly”和“Secure”列已被勾选。注意:某些浏览器可能不会在此处显示所有属性,因此以Set-Cookie响应头为准。
客户端脚本访问测试(HttpOnly专项)
此测试旨在主动验证HttpOnly属性的有效性。
执行测试:在已登录目标网站的状态下,打开浏览器开发者工具的“控制台”(Console)标签页。
输入命令:键入document.cookie并执行。
结果分析:
测试通过:返回的字符串中不包含被标记为HttpOnly的Cookie(例如,看不到sessionId=abc123)。可能只显示一些非敏感、未设置HttpOnly的Cookie(如UI偏好设置)。
测试失败/漏洞:返回的字符串中包含了明显的会话标识符或其他敏感Cookie。这证明该Cookie未设置HttpOnly属性,存在被XSS攻击窃取的高风险。
明文传输测试(Secure专项)
此测试验证Secure属性是否有效防止Cookie在明文中传输。
强制HTTP访问:尝试使用http://协议(而非https://)访问网站的受限页面(如用户个人中心)。注意:现代浏览器可能会自动强制跳转到HTTPS。
拦截和分析请求(推荐方法-使用代理工具):
使用BurpSuite或OWASPZAP等中间人代理工具。
配置浏览器流量经过该代理。
即使浏览器自动跳转到HTTPS,代理工具通常可以拦截到最初的HTTP请求。
验证:查看工具捕获到的发出的HTTP请求头。在Cookie请求头中,不应出现任何标记了Secure属性的Cookie。
同时验证HTTPS请求:确保在正常的HTTPS请求中,这些Cookie被正常发送。结论:Secure属性工作正常,当且仅当该Cookie在HTTPS请求中被发送,而在HTTP请求中绝不发送。
自动化全面爬取与检测
手动测试可能遗漏某些边缘功能设置的Cookie。自动化工具可以提供更加全面的覆盖。
使用动态应用安全测试(DAST)工具:
工具:OWASPZAP,BurpSuiteProfessional(自带主动扫描功能),Nessus,QualysWAS等。
方法:配置工具对目标网站进行认证式爬取(提供测试账户凭证),让工具自动遍历网站的所有功能链接和表单。
报告分析:扫描完成后,查看工具生成的报告。高级安全扫描器通常会有一个专门的检查项(如“CookieWithoutHttpOnlyFlag”,“CookieWithoutSecureFlag”),并会列出所有存在问题的Cookie及其所在的URL,提供清晰的风险评估。