在Web安全领域,跨站脚本攻击时最为常见的一种攻击形式,也是长久以来的一个老大难问题,而本文将向读者介绍的是一种用以缓解这种压力的技术,即HTTP-only cookie。

跨站点脚本攻击是困扰Web服务器安全的常见问题之一。跨站点脚本攻击是一种服务器端的安全漏洞,常见于当把用户的输入作为HTML提交时,服务器端没有进行适当的过滤所致。跨站点脚本攻击可能引起泄漏Web 站点用户的敏感信息。为了降低跨站点脚本攻击的风险,微软公司的Internet Explorer 6 SP1引入了一项新的特性。

这个特性是为Cookie提供了一个新属性,用以阻止客户端脚本访问Cookie。

像这样具有该属性的cookie被称为HTTP-only cookie。包含在HTTP-only cookie中的任何信息暴露给黑客或者恶意网站的几率将会大大降低。下面是设置HTTP-only cookie的一个报头的示例:

Set-Cookie: USER=123; expires=Wednesday, 09-Nov-99 23:12:40 GMT; HttpOnly

跨站点脚本攻击是一种服务器端常见的安全漏洞,它使得黑客可以欺骗用户从而导致用户在某个Web 站点上的敏感信息的泄漏

xss偷取cookie就是利用前端脚本获取cookie发送到黑客存储cookie的api上达到偷取cookie的效果

而httponly就是为了缓解跨站点脚本攻击带来的信息泄露风险,Internet Explorer 6 SP1为Cookie引入了一个新属性。这个属性规定,不许通过脚本访问cookie。使用HTTP-only Cookie后,Web 站点就能排除cookie中的敏感信息被发送给黑客的计算机或者使用脚本的Web站点的可能性。

Cookie通常是作为HTTP 应答头发送给客户端的,下面的例子展示了相应的语法(注意,HttpOnly属性对大小写不敏感):

Set-Cookie: =[; =]

[; expires=][; domain=]

[; path=][; secure][; HttpOnly]

即使应答头中含有HttpOnly属性,当用户浏览有效域中的站点时,这个cookie仍会被自动发送。但是,却不能够在Internet Explorer 6 SP1中使用脚本来访问该cookie,即使起初建立该cookie的那个Web 站点也不例外。这意味着,即使存在跨站点脚本攻击缺陷,并且用户被骗点击了利用该漏洞的链接,Internet Explorer也不会将该cookie发送给任何第三方。这样的话,就保证了信息的安全。

注意,为了降低跨站点脚本攻击带来的损害,通常需要将HTTP-only Cookie和其他技术组合使用。如果单独使用的话,它无法全面抵御跨站点脚本攻击。

他的作用就单纯的只是限制前端脚本获取指定的某个cookie而已,哪个cookie被httponly保护,哪个cookie在前端就无法通过js获取到

但是部分老版本的浏览器不支持httponly的,这个防护就没用了,不过因为安全问题,那种老掉牙的浏览器现在基本停产,古董到你连那个版本下载地址都找不到。

好了,说回正题

在php中设定cookie全局被httponly保护,php在>=5.2的所有版本中都已经支持设定全局cookie被httponly保护,使用php_ini控制开关。

示例:

<?php 
ini_set("session.cookie_httponly", 1);
?>
Last modification:August 14th, 2020 at 10:00 am
如果觉得我的文章对你有用,请随意赞赏