Web安全之Cookie管理

前面我们讲到过XSS攻击,其原理就是利用脚本读取用户的Cookie从而造成用户信息泄露。这里我们要介绍Cookie的几个关键属性值HttpOnly、Secure及其用法。


HttpOnly

该属性值的作用就是防止Cookie值被页面脚本读取。一个没有设置HttpOnly的Cookie:

setcookie('name','lf');

效果如下:
这里写图片描述

这段代码就可能被攻击者用脚本来获取,所以我们应该为Cookie添加HttpOnly属性如下:

setcookie('name','lf');
setcookie('age','23',NULL,NULL,NULL,NULL,TRUE);//HttpOnly属性为true

效果如下:
这里写图片描述

切记HttpOnly属性只是增加了攻击者的难度,不能达到完全防御XSS攻击。


Secure

接下来要介绍的就是Secure属性了。给Cookie设置该属性时,只有在https协议下访问的时候,浏览器才会发送该Cookie。

还是刚才的代码:

setcookie('age','23',NULL,NULL,NULL,NULL,TRUE);//HttpOnly属性为true

如果我们仅仅设置了HttpOnly属性,只能防止Cookie不被脚本获取,却不能防止Cookie被攻击者通过抓包来读取,如果加上了Secure属性,就算攻击者窃听网络,也无法获取用户明文Cookie了。

setcookie('gf','tyq',Null,Null,Null,TRUE,Null);//Secure属性为true

效果如下:
这里写图片描述


有效期

最后来说说Cookie的有效期,刚才的代码并没有在服务器中设置强制超时时间,所以万一用户获取到用户的Cookie后,就可以一直使用用户身份登录。
我们在设置Cookie认证的时候,需要加入两个时间,一个是“即使一直在活动,也要失效”的时间,一个是“长时间不活动的失效时间”。并在Web应用中,首先判断两个时间是否已超时,再执行其他操作。

       // 判断会员的cookie是否过期
        if (isLogin) {
            String timeStampStr = (String) map.get(UserAuthenticationContext.TIMESTAMP);
            long loginTime = 0;
            try {
                loginTime = Long.parseLong(timeStampStr);
            } catch (NumberFormatException e) {
                if (logger.isInfoEnabled()) {
                    logger.info(" loginId: " + usr.getLoginId() + " timestamp has exception " + timeStampStr);
                }
            }
            long now = System.currentTimeMillis() / 1000;
            if (now - loginTime > UserAuthenticationContext.COOKIE_VALIDITY) {
                usr.setAuthenticated(false, true);
                if (logger.isInfoEnabled()) {
                    logger.info("loginId: " + usr.getLoginId() + " loginTime: " + loginTime + " nowTime: " + now);
                }
            }
        }

最后形成保护Web应用的综合防御。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值