在Web系统中,Cookie中常常包含重要的服务器会话信息以及与用户相关的各种私密信息。在整个安全传输过程中要特别重视Cookie的安全,避免被恶意用户截获以及利用。

1、Cookie的HttpOnly

HttpOnly可以让Cookie在浏览器中不可见,开启HttpOnly可以防止脚本通过document对象获取Cookie。

浏览器在浏览网页时一般不受任何影响,Cookie会被放在浏览器头中发送出去(包括Ajax时),应用程序一般是不会在JS里操作这些敏感Cookie的。对于一些敏感的Cookie一般采用HttpOnly,对于一些需要在应用程序中用JS操作的Cookie就不予设置,这样就保障了Cookie信息的安全,也保证了应用,可以有效地预防一些XSS和CSRF攻击。此外,需要在PHP配置文件中设置HttpOnly开关,将session.cookie_httponly的值设置为1表示开启HttpOnly。配置方式如下。

session.cookie_httponly = 1  ; 开启HttpOnly

2、Cookie的Secure

如果Web传输协议使用的是HTTPS,则应开启cookie_secure选项,当Secure属性设置为true时,Cookie只有在HTTPS下才能上传到服务器,而在HTTP下是没法上传的。防止Cookie被窃取,需要在PHP配置中修改,将session.cookie_secure的值设置为1,标示开启Secure。配置方式如下。

session.cookie_secure = 1

3、指定Cookie的使用范围

Cookie一定要设置超时和Domain,敏感信息尽量不要保存在Cookie中,Cookie中的数据尽量进行加密,设置domain时尽量不要设置*.ptpress.com.cn之类通配域名,以避免其他同根域网站的XSS漏洞引起的跨站Cookie窃取,PHP中使用setcookie()函数进行Cookie的设置。在下面的代码中,name是Cookie的名称,value是Cookie的值,expire是失效时间,path是Cookie的生效路径,domain是Cookie的作用域名范围,secure用于指定是否开启HTTPS连接来传输Cookie。

setcookie(name,value,expire,path,domain,secure)