如何提高cookie的安全性

一、限制敏感信息写入cookie
如果要通过Cookie来维持用户的登录状态,请务必不要存储 “登录ID、密码” 等敏感信息,而是应该在服务端存储用户的会话状态Session,并用对应的SessionID来替代上述的敏感信息

二、在向Set-Cookie中写入内容前,要进行过滤

  1. 过滤特殊字符:
    防止针对Cookie的CRLF攻击【如果当Cookie的某些内容是可由用户控制的,那么千万要在写入Set-Cookie时对内容进行过滤,尤其是换行符、截断符等】
  2. 对保存到cookie里面的敏感信息必须加密
    cookie中的数据通常会包含用户的隐私数据,首先要保证数据的保密性,其次要保证数据不能被伪造或者篡改,基于这两点,我们通常需要对cookie内容进行加密,加密方式一般使用对称加密(单密钥,如DES)或非对称加密(一对密钥,如RSA),密钥需要保存在服务器端一个安全的地方,这样,别人不知道密钥时,无法对数据进行解密,也无法伪造或篡改数据。

二、做Cookie的访问控制

  1. 在HTTP响应的Set-Cookie中添加HttpOnly属性,限制 Cookie 的访问权限Set-Cookie: name=value; HttpOnly
    在设置了 HttpOnly 属性的情况下,浏览器将禁止通过 JavaScript 访问和修改 Cookie,从而有效地防止一些常见的攻击,例如跨站脚本攻击(XSS)
  2. 在HTTP响应的Set-Cookie中添加Domain属性,设置Cookie的可用域:Set-Cookie: name=value; Domain=example.com
  3. 在HTTP响应的Set-Cookie中添加Path属性,设置Cookie的可用路径:Set-Cookie: name=value; Path=/

三、限制Cookie的传输方式

  1. 在HTTP响应的Set-Cookie字段中添加Secure属性,以要求Cookie仅在HTTPS下才能传输Set-Cookie: name=value; Secure

  2. 当setSecure(true)时,只有在https协议下访问的时候,浏览器才会发送该cookie给服务端,http连接不发送,所以绝对不会被窃听到

  • 当setSecure(true)时,浏览器端的cookie不会传递到服务器端
  • 当setSecure(true)时,服务器端的cookie会传递到浏览器端

四、限制Cookie的存储

  1. 在HTTP响应的Set-Cookie中添加expires和max-age属性,设置过期时间:
  • 用expires指定绝对时间: Set-Cookie: name=value; expires=Wed, 21 Oct 2021 07:28:00 GMT;

  • 用max-age指定存活时间(s): Set-Cookie: name=value; max-age=3600;

  1. 给cookie设置有效期意义
  • 如果不设置有效期,万一用户获取到用户的Cookie后,就可以一直使用用户身份登录。
  • 在设置Cookie认证的时候,需要加入两个时间,一个是“即使一直在活动,也要失效”的时间,一个是“长时间不活动的失效时间”,并在Web应用中,首先判断两个时间是否已超时,再执行其他操作。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容