【安全拾遗】cookie保护伞之Httponly

来源:互联网 发布:大学练字钢笔推荐 知乎 编辑:程序博客网 时间:2024/05/21 09:53

在网站攻击中,XSS攻击是很常见的一种。

XSS全称Cross Site Scripting,为不与CSS重名,因此简写成XSS。攻击者通过在原始页面注入恶意的javascript脚本语言,达到获取用户token,从而达到伪造用户身份的目的。

为了防范XSS的攻击,浏览器开发商发明了一个属性Httponly,如果给Cookie加上这个属性,js就不能通过document.cookie来获取Cookie,仅仅用作http协议通信。

在PHP中的应用:

setcookie("token", "1234567", NULL, NULL, NULL, NULL, TRUE); //PHP5里的用法,最后一个参数设置为TRUE时开启Httponly支持
header("Set-Cookie: hidden=value; httpOnly"); //PHP4里的用法

做个小实验:

class Httponly {    public static function test() {        setcookie('username','simon',null,null,null,null,FALSE);        setcookie('token','1234567',null,null,null,null,TRUE);    }}Httponly::test();

在Chrome浏览器运行后,按F12调出代码调试器,在Resources里点击Cookie列表,如下图所示,名称为token的Cookie在HTTP栏里有个勾,表示是Httponly属性:

再切换到Console控制台,输入document.cookie回车,发现刚刚我们设置的两个Cookie值,只得到了username的值,token由于是Httponly属性的,得到了浏览器的保护,从而达到保护Cookie的目的。如下图所示:



小结:在写服务端代码时,我们可以把那些安全性要求高的Cookie设置成Httponly,尽可能地做到防范XSS攻击于未然。



1 0
原创粉丝点击