HttpOnly是怎么回事?
最近配合公司安全团队开展⼀些⼯作,安全团队建议,内部系统(⽤户端系统有跨域需求,其他⽅式解决更合适)对接SSO建议开启HttpOnly。HttpOnly?没听说过,赶紧百度⼀下。
⼀、什么是HttpOnly
根据Jordan Wiens⼀篇博客《No cookie for you!》记载,HttpOnly cookie最初是由Microsoft Internet Explorer开发⼈员于2002年在Internet Explorer 6 SP1的版本中实现。
微软开发者⽹站介绍,HttpOnly是Set-Cookie HTTP响应头中包含的附加标志。⽣成cookie时使⽤HttpOnly标志有助于降低客户端脚本访问受保护cookie的风险(如果浏览器⽀持它)。
以下⽰例显⽰了HTTP响应标头中使⽤的语法
如果HTTP响应头中包含HttpOnly标志,只要浏览器⽀持HttpOnly标志,客户端脚本就⽆法访问cookie。因此,即使存在跨站点脚本(XSS)缺陷,且⽤户意外访问利⽤此漏洞的链接,浏览器也不会向第三⽅透露cookie。
如果浏览器不⽀持HttpOnly并且⽹站尝试设置HttpOnly cookie,浏览器会忽略HttpOnly标志,从⽽创建⼀个传统的,脚本可访问的cookie。
⼆、使⽤HttpOnly减轻最常见的XSS攻击
根据微软Secure Windows Initiative⼩组的⾼级安全项⽬经理Michael Howard的说法,⼤多数XSS攻击的⽬的都是盗窃cookie。服务端可以通过在它创建的cookie上设置HttpOnly标志来缓解这个问题,指出不应在客户端上访问cookie。
客户端脚本代码尝试读取包含HttpOnly标志的cookie,如果浏览器⽀持HttpOnly,则返回⼀个空字符串作为结果。这样能够阻⽌恶意代码(通常是XSS攻击)将cookie数据发到攻击者⽹站。
三、通过Java设置HttpOnly
⾃Java Enterprise Edition 6(JavaEE 6)采⽤Java Servlet 3.0技术以来,编程上很容易在cookie上设置HttpOnly标志。
事实上,Cookie有两个⽅法setHttpOnly和isHttpOnly,cookie(JSESSIONID)也有。
此外,JavaEE 6开始,也可以通过配置⽂件l来配置HttpOnly
对于JavaEE 6之前的Java Enterprise Edition版本,常见的解决⽅法是使⽤显式附加HttpOnly标志的会话cookie值覆盖SET-COOKIE HTTP 响应头
粗暴覆盖并不好,因为JSESSIONID可能已经设置了其他标志。更好的解决⽅法是处理先前设置的标志。实际
上,SecurityWrapperResponse的addCookie⽅法可以解决这个问题。我们可以编写⼀个servlet过滤器
⼀些实现JavaEE 5的Web应⽤程序服务器和实现Java Servlet 2.5(JavaEE 5的⼀部分)的servlet容器也允许创建HttpOnly会话cookie
例如Tomcat 6可以在l⽂件中进⾏如下设置
四、⽤好Web应⽤防⽕墙
如果代码更改不可⾏或成本太⾼,可以使⽤Web应⽤程序防⽕墙将HttpOnly添加到会话cookie
Mod_security - using SecRule and Header directives
ESAPI WAF - using add-http-only-flag directive
⽀持HttpOnly的主流浏览器有哪些呢?⾕歌了⼀下,常见的浏览器都⽀持。java xml是什么
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论