如果cookie被篡改怎么办?(得30个字就凑凑凑)
那就对cookie加密吧,解码不了篡改也没有用。
只能防篡改对cookie加密,用:md5(cookieValue+key)或sha1(cookieValue+key),key可以是服务器端掌握的一个固定字符串,也可以很复杂
一、为什么Cookie需要防篡改
为什么要做Cookie防篡改,一个重要原因是 Cookie中存储有判断当前登陆用户会话信息(Session)的会话票据-SessionID和一些用户信息。
当发起一个HTTP请求,HTTP请求头会带上Cookie,Cookie里面就包含有SessionID。
后端服务根据SessionID,去获取当前的会话信息。如果会话信息存在,则代表该请求的用户已经登陆。
服务器根据登陆用户的权限,返回请求的数据到浏览器端。
因为Cookie是存储在客户端,用户可以随意修改。所以,存在一定的安全隐患。
二、例子
wall
在浏览器端输入用户名密码,发起POST请求到后端服务器。后端服务器验证合法,返回Response,并Set-Cookie
为sessionid=***;username=wall;
。Set-Cookie
,将其存入本地内存或硬盘中。sessionid=***;username=wall;
,请求修改自己的头像信息。sessionid
验证当前用户已登陆,根据username
,查找数据库中的对应数据,修改头像信息。如果当前用户知道username
的作用,修改username=pony
。再次发起请求,则服务器接收到请求后,会去修改username
为pony
的数据。
这样,就暴露出数据被恶意篡改的风险。
三、防篡改签名
服务器为每个Cookie项生成签名。如果用户篡改Cookie,则与签名无法对应上。以此,来判断数据是否被篡改。
原理如下:
secret
secret(wall)=34Yult8i
username=wall|34Yult8i
。其中,内容和签名用|
隔开。举个栗子:
比如服务器接收到请求中的Cookie项username=pony|34Yult8i
,然后使用签名生成算法secret(pony)=666
。
算法得到的签名666
和请求中数据的签名不一致,则证明数据被篡改。
四、敏感数据的保护
鉴于Cookie的安全性隐患,敏感数据都应避免存储在Cookie。
应该根据SessionID,将敏感数据存储在后端。取数据时,根据SessionID去后端服务器获取即可。
另外,对一些重要的Cookie项,应该生成对应的签名,来防止被恶意篡改。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632