HttpOnly 标志–保护 Cookies 免受 XSS 攻击

1.什么是HttpOnly?

        如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,只能通过http方式获取cookie。

        如果支持HttpOnly的浏览器检测到包含HttpOnly标志的cookie,并且客户端脚本代码尝试读取该cookie,则浏览器将返回一个空字符串作为结果。这会通过阻止恶意代码(通常是XSS)将数据发送到攻击者的网站来使攻击失败。

跨站点脚本(XSS)攻击通常旨在窃取会话Cookie。

        在这种攻击中,cookie值由使用JavaScript (document.cookie)的客户端脚本访问。但是,在日常使用中,Web应用程序很少需要通过JavaScript访问cookie。因此,设计了一种防止cookie被盗的方法:一个告诉web浏览器只能通过HTTP访问cookie的标志——HttpOnly标志。

        该的HttpOnly标志不是新的。它最初于2002年在Microsoft Internet Explorer 6 SP1中实现,以防止敏感信息被盗。当前,每个主流浏览器都支持HttpOnly cookie。

HttpOnly如何工作?

        HttpOnly属性是Set-Cookie HTTP响应头的一个可选属性,在HTTP响应中,web服务器将该属性与web页面一起发送到web浏览器。下面是一个使用Set-Cookie头设置会话cookie的例子:

HTTP/2.0 200 OK Content-Type: text/html Set-Cookie: sessionid=QmFieWxvbiA1

        上面的会话cookie没有受到保护,可以在XSS攻击中被盗。但是,如果会话cookie设置如下,则可以防止使用JavaScript对其进行访问:

Set-Cookie: sessionid=QmFieWxvbiA1; HttpOnly

如何设置HttpOnly服务器端?

        所有现代的后端语言和环境都支持设置HttpOnly标志。这是一个如何使用setcookie函数在PHP中执行此操作的示例:

setcookie("sessionid", "QmFieWxvbiA1", ['httponly' => true]);

        最后一个值(true)表示设置HttpOnly属性。

扫描二维码关注公众号,回复: 15290098 查看本文章

安全Cookie的其他标志

        HttpOnly标志不是您可以用来保护cookie的唯一标志。这里还有两个有用的方法。

安全标志
        该安全标志被用于声明该cookie可能仅使用安全连接来发送(SSL / HTTPS)。如果设置了此cookie,那么如果连接是HTTP,浏览器将永远不会发送该cookie。该标志防止通过中间人攻击盗窃cookie 。

        请注意,只能在HTTPS连接期间设置此标志。如果是在HTTP连接期间设置的,则浏览器将忽略它。

        .....

参考文章:

HttpOnly 标志–保护 Cookies 免受 XSS 攻击 - 网安

https://www.cnblogs.com/softidea/p/6040260.html

HttpOnly是个什么鬼 - 简书

Cookie中HttpOnly的使用方式以及用途_cookie httponly_好事总会发生在下个转弯的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/liuqinhou/article/details/131061143