HttpOnly是什么
简单的说:
- HttpOnly是Cookie的属性;
- Web服务器通过为Cookie设置这个属性,告诉浏览器应当避免页面端的脚本访问对应Cookie的值,保证被Cookie承载的敏感信息不被恶意读取;
- Web服务器可以保存一些用户的敏感数据到Cookie中,实现比如SSO的功能;
- 当然是否安全,光靠Web服务器设置HttpOnly属性是没有用的,浏览器需要按要求支持这个属性,否则仍然存在安全问题。
为Cookie设置HttpOnly属性的语法如下。
Set-Cookie: <name>=<value>[; <name>=<value>]
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HttpOnly]
如何设置
对于Tomcat 7.0.x以上的版本,可以在应用的web.xml文件中增加如下配置。
<session-config>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure> <!-- 启用HTTPS后,建议配置这行,仅在安全通道时传输Cookie,提升安全性 -->
</cookie-config>
<session-config>
查阅Apache Tomcat官方Cookie类的文档,可以发现从7.0.x版本可以通过Cookie
类对象的API来设置httpOnly
属性。
/**
* Sets the flag that controls if this cookie will be hidden from scripts on the client side.
*/
setHttpOnly(boolean httpOnly)
如何判断HttpOnly是否生效
打开Chrome调试器的Resources面板,在左边选择Cookies,这时在右边可以看到Chrome缓存的cookie数据。
注意观察HTTP、Secure列:
- 如果HTTP列有对勾,说明对应行的cookie设置了HttpOnly属性;
- 如果Secure列有对勾,说明对应行的cookie设置了secure属性;
资料
- HttpOnly
- Mitigating Cross-site Scripting With HTTP-only Cookies
- 利用HTTP-only Cookie缓解XSS之痛
- 如何为cookie设置HttpOnly
- 某些浏览器中因cookie设置HttpOnly标志引起的安全问题
- HttpCookie.HttpOnly VS Cookie.HttpOnly?(downmoon原创)