Cookie防篡改机制
一、为什么Cookie需要防篡改
为什么要做Cookie防篡改,一个重要原因是 Cookie中存储有判断当前登陆用户会话信息(Session)的会话票据-SessionID和一些用户信息。
当发起一个HTTP请求,HTTP请求头会带上Cookie,Cookie里面就包含有SessionID。
后端服务根据SessionID,去获取当前的会话信息。如果会话信息存在,则代表该请求的用户已经登陆。
服务器根据登陆用户的权限,返回请求的数据到浏览器端。
因为Cookie是存储在客户端,用户可以随意修改。所以,存在一定的安全隐患。
二、例子
- 用户
wall
在浏览器端输入用户名密码,发起POST请求到后端服务器。后端服务器验证合法,返回Response,并Set-Cookie
为sessionid=***;username=wall;
。 - 浏览器端在接收到HTTP响应后,发现
Set-Cookie
,将其存入本地内存或硬盘中。 - 浏览器端再次发起请求,带上Cookie信息
sessionid=***;username=wall;
,请求修改自己的头像信息。 - 服务器根据
sessionid
验证当前用户已登陆,根据username
,查找数据库中的对应数据,修改头像信息。
如果当前用户知道username
的作用,修改username=pony
。再次发起请求,则服务器接收到请求后,会去修改username
为pony
的数据。
这样,就暴露出数据被恶意篡改的风险。
三、防篡改签名
服务器为每个Cookie项生成签名。如果用户篡改Cookie,则与签名无法对应上。以此,来判断数据是否被篡改。
原理如下:
- 服务端提供一个签名生成算法
secret
- 根据方法生成签名
secret(wall)=34Yult8i
- 将生成的签名放入对应的Cookie项
username=wall|34Yult8i
。其中,内容和签名用|
隔开。 - 服务端根据接收到的内容和签名,校验内容是否被篡改。
举个栗子:
比如服务器接收到请求中的Cookie项username=pony|34Yult8i
,然后使用签名生成算法secret(pony)=666
。
算法得到的签名666
和请求中数据的签名不一致,则证明数据被篡改。
四、敏感数据的保护
鉴于Cookie的安全性隐患,敏感数据都应避免存储在Cookie。
应该根据SessionID,将敏感数据存储在后端。取数据时,根据SessionID去后端服务器获取即可。
另外,对一些重要的Cookie项,应该生成对应的签名,来防止被恶意篡改。
Cookie防篡改机制的更多相关文章
- cookie安全隐患及防篡改机制
Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...
- 网站如何防Session冒名顶替和cookie防篡改
做网站难免要面对安全性的问题,诸如sql注入拉,cookie冒名拉,等等,sql注入算是老生常谈,翻翻旧账有不少优秀的帖子在说明这个问题,所以我们来说说Session冒名顶替的风险以及应对的办法. 首 ...
- cookie防篡改
概述: 除了 session 外,一般不会在客户端的 cookies 里保存过于重要的凭据,但电商应用有时候不可避免地存储了一些敏感数据到客户端,当然不希望被篡改. 目的: 让服务器端能识别cooki ...
- Cookie防伪造防修改 电商课题:cookie防篡改
主要防止非法用户修改cookie信息,以及cookie的超时时间 传统cookie存储,Cookie(name, value),value很容易就被篡改. 防修改cookie存储,Cookie(nam ...
- 01WebApi防篡改机制---HMAC机制
防篡改,顾名思义就是防止有人恶意篡改请求数据URL以达到恶意攻击的目的,那要怎么才能实现这样的目的呢? 很简单,将要请求的数据加上合作号.合作Key按规则组织成一个字符串,获取对应的MD5摘要,然后将 ...
- [转载]Cookie/Session的机制与安全
Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...
- Cookie/Session的机制与安全
转载自:https://harttle.land/2015/08/10/cookie-session.html Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以 ...
- Spring Boot如何设计防篡改、防重放攻击接口
Spring Boot 防篡改.防重放攻击 本示例要内容 请求参数防止篡改攻击 基于timestamp方案,防止重放攻击 使用swagger接口文档自动生成 API接口设计 API接口由于需要供第三方 ...
- 防刷票机制研究和.NET HttpRequest Proxy
最近应朋友之约 测试他做的投票网站 防刷票机制能力如何,下面有一些心得和体会. 朋友网站用PHP写的,走的是HttpRequest,他一开始认为IP认证应该就差不多了.但说实话这种很low,手动更换代 ...
随机推荐
- winform编程设定listview选中行
在做项目中,需要用到listview显示数据.同时,项目要求,通过检索用户输入的数据,程序通过搜索,确定数据所在的行并通过程序设定为选中状态并高亮显示.同时,正常响应鼠标单击响应的效果,单击时,程序设 ...
- HBase中创建索引
hbasene(https://github.com/akkumar/hbasene)是开源项目,在hbase存储上封装使用Lucene来创建索引,代码API非常简单,熟悉lucene的朋友可以很方便 ...
- LeetCode之旅(18)-Happy Number
题目 Write an algorithm to determine if a number is "happy". A happy number is a number defi ...
- asp.net 调试与iis部署的问题
第一个问题:编译器错误信息: CS0016: 未能写入输出文件"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET ...
- 查找链表中是否有环linked-list-cycle
Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...
- Java复习2.程序内存管理
前言: 国庆节的第三天,大家都回家了,一个人在宿舍好无聊.不过这年头与其说是出去玩不如是说出去挤,所以在学校里还是清闲的好.找工作不用担心了,到时候看着你们慢慢忙:插个话题,大学都没有恋爱过,总之各种 ...
- eclipse调试的方法和技巧
eclipse调试图标所代表的含义: Step into 单步进入-将进入执行的方法内部继续执行. Step over 单步前进-执行下一步. Step return – 单步退出-跳出正在执行的方 ...
- AttributeError: module 'enum' has no attribute 'IntFlag'
Mac PyCharm新建以Python3.6.1为解释器的Django项目的时候出现以下错误提示: AttributeError: module 'enum' has no attribute 'I ...
- Django push: Using Server-Sent Events and WebSocket with Django
http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/ The goal of ...
- Python黑客泰斗利用aircrack-ng破解 wifi 密码,超详细教程!
开始前,先连上无线网卡,因为虚拟机中的kali系统不用调用笔记本自带的无线网卡,所以需要一个外接无线网卡,然后接入kali系统. 输入 ifconfig -a 查看网卡,多了个 wlan0,说明网卡已 ...