- A+
写这篇的目的是,今天在重新学习javascript时发现了HttpOnly这个标签,所以专门的mark了下。
谁在什么时候发明了HttpOnly
2002年微软为ie6的sp1创造了HttpOnly
什么是HttpOnly
HttpOnly是包含在http返回头Set-Cookie里面的一个附加的flag,所以它是后端服务器对cookie设置的一个附加的属性,在生成cookie时使用HttpOnly标志有助于减轻客户端脚本访问受保护cookie的风险(如果浏览器支持的话)
下面的例子展示了如何设置Set-Cookie 返回头的语法
Set-Cookie: <name>=<value>[; <Max-Age>=<age>]
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HttpOnly]
如果HTTP响应标头中包含HttpOnly标志(可选),客户端脚本将无法访问cookie(如果浏览器支持该标志的话)。因此即使客户端存在跨站点脚本(XSS)漏洞,浏览器也不会将Cookie透露给第三方。
如果浏览器不支持HttpOnly,并且后端服务器尝试设置HttpOnly cookie,浏览器也会忽略HttpOnly标志,从而创建传统的,脚本可访问的cookie。那么该cookie(通常是会话cookie)容易受到XSS攻击
使用HttpOnly缓解最常见的XSS攻击
大多数XSS攻击都是针对会话cookie的盗窃。后端服务器可以通过在其创建的cookie上设置HttpOnly标志来帮助缓解此问题,这表明该cookie在客户端上不可访问。
如果支持HttpOnly的浏览器检测到包含HttpOnly标志的cookie,并且客户端脚本代码尝试读取该cookie,则浏览器将返回一个空字符串作为结果。这会通过阻止恶意代码(通常是XSS)将数据发送到攻击者的网站来使攻击失败。
java服务器设置HttpOnly
自从采用Java Servlet 3.0之上的容器,很容易在cookie上设置HttpOnly标志。实际上,setHttpOnly和isHttpOnly方法可在Cookie接口中使用,如下
Cookie cookie = getMyCookie("myCookieName");
cookie.setHttpOnly(true);
在WEB-INF/web.xml的设置如下
<session-config>
<cookie-config>
<http-only>true</http-only>
</cookie-config>
</session-config>