为了账号安全,请及时绑定邮箱和手机立即绑定

Cookie防篡改机制

作者:wall  原文链接

一、为什么Cookie需要防篡改

为什么要做Cookie防篡改,一个重要原因是 Cookie中存储有判断当前登陆用户会话信息(Session)的会话票据-SessionID和一些用户信息。 当发起一个HTTP请求,HTTP请求头会带上Cookie,Cookie里面就包含有SessionID。 后端服务根据SessionID,去获取当前的会话信息。如果会话信息存在,则代表该请求的用户已经登陆。 服务器根据登陆用户的权限,返回请求的数据到浏览器端。

因为Cookie是存储在客户端,用户可以随意修改。所以,存在一定的安全隐患。

二、例子

  1. 用户wall在浏览器端输入用户名密码,发起POST请求到后端服务器。后端服务器验证合法,返回Response,并Set-Cookiesessionid=***;username=wall;

  2. 浏览器端在接收到HTTP响应后,发现Set-Cookie,将其存入本地内存或硬盘中。

  3. 浏览器端再次发起请求,带上Cookie信息sessionid=***;username=wall;,请求修改自己的头像信息。

  4. 服务器根据sessionid验证当前用户已登陆,根据username,查找数据库中的对应数据,修改头像信息。


如果当前用户知道username的作用,修改username=pony。再次发起请求,则服务器接收到请求后,会去修改usernamepony的数据。 这样,就暴露出数据被恶意篡改的风险。

三、防篡改签名

服务器为每个Cookie项生成签名。如果用户篡改Cookie,则与签名无法对应上。以此,来判断数据是否被篡改。

原理如下:

  • 服务端提供一个签名生成算法secret

  • 根据方法生成签名secret(wall)=34Yult8i

  • 将生成的签名放入对应的Cookie项username=wall|34Yult8i。其中,内容和签名用|隔开。

  • 服务端根据接收到的内容和签名,校验内容是否被篡改。

举个栗子:

比如服务器接收到请求中的Cookie项username=pony|34Yult8i,然后使用签名生成算法secret(pony)=666。 算法得到的签名666和请求中数据的签名不一致,则证明数据被篡改。

四、敏感数据的保护

鉴于Cookie的安全性隐患,敏感数据都应避免存储在Cookie。 应该根据SessionID,将敏感数据存储在后端。取数据时,根据SessionID去后端服务器获取即可。 另外,对一些重要的Cookie项,应该生成对应的签名,来防止被恶意篡改。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消