关于如何处理httpOnly的问题?

  • 关于如何处理httpOnly的问题?已关闭评论
  • 233 次浏览
  • A+
所属分类:Web前端
摘要

写这篇的目的是,今天在重新学习javascript时发现了HttpOnly这个标签,所以专门的mark了下。

写这篇的目的是,今天在重新学习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>