前端web安全-CSRF基础入门
前言
今天找了个新地方进行学习 嘿嘿 采光不错!特别适合看书呢。
前言
1.CSRF
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
2.漏洞危害
CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。
3.CSRF漏洞原理
从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:
1.登录受信任网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B。
看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:
1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......)
3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。
一个场景:
目标网站A:www.a.com
恶意网站B:www.b.com
目标网站A上有一个删除文章的功能,通常是用户单击"删除链接"时才会删除指定的文章,这个链接时www.a.com/blog/del?id=1,id号代表的是不同的文章。我们知道,这样删除文章实际上就是发出一个GET请求,那么如果目标网站A上存在一个XSS漏洞,执行的JS脚本无同源策略限制,就可以按下面的方式来删除文章.
- 使用AJAX发出GET请求,请求值id=1,请求目标地址是www.a.com/blog/del?id=1
- 或者动态创建一个标签对象(如img、iframe、script)等,将他们的src指向这个链接www.a.com/blog/del?id=1,发出的也是GET请求
- 然后欺骗用户访问存在XSS脚本的漏洞页面(在目标网站A上),则攻击发生
如果不使用这种方式,或者目标网站A根本不存在XSS漏洞,还可以如何删除文章?看CSRF思路
- 在恶意网站B上编写一个CSRF页面(www.b.com/csrf.htm)页面,想想有什么办法GET请求到目标网站A上
- 利用AJAX?不行,它禁止域传输数据
- 那么,用代码<img src="http://www.a.com/blog/del?id=1">
- 然后欺骗已经登录目标网站A的用户访问www.b.com/csrf.htm页面,则攻击发生
这三个攻击过程有三个关键点:跨域发出了一个GET请求、可以无javascript参与,请求是身份认证后的
- 跨域发出一个GET请求
- 可以无javascript参与
- 请求是身份认证后的
实例演示.
漏洞网站:www.huahua.com
黑客的恶意网站:www.hack.com
这时我们本地搭建的一个测试网站 环境还是以上面A网站和B网站 A网站是我们的目标 当我们点击删除按钮后 它会想服务器发送这样一个HTTP请求
当我们点击是会发出这样的跨域请求
GET /www/admin/doAdminAction.php?act=delAdmin&id=2 HTTP/1.1
Host: www.huahua.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://www.hua.com/www/admin/listAdmin.php
Cookie: PHPSESSID=4ot3e15t8m6frau1s0vvoft0b6
Upgrade-Insecure-Requests: 1
如果黑客构建一个这样的页面地址为:www.hack.com/csrf.html
<html>
<img src="http://192.168.233.1/www/admin/doAdminAction.php?act=delAdmin&id=2">
</html>
那么当用户打开页面的时候回发出这样的跨域请求 此时id=2的HUAHUAHUA账户被删除
GET /www/admin/doAdminAction.php?act=delAdmin&id=2 HTTP/1.1
Host: www.huahua.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: image/webp,*/*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://www.hack.com/csrf.html
Cookie: PHPSESSID=2a4eu21lbn2k1n126bddi56u60
我们可以看到两个请求中,除了来源Referer值不一样外,其它都一样,尤其是我们的cookie的值,改Cookie是用户登录目标网站www.huahua.com的身份认证标志。跨域发出的请求也同样会带上目标网站A的用户Cookie,这样的请求就是身份认证后的,攻击才会成功。
Cookie分为本地cookie和内存cookie,这两类cookie在CSRF的过程中存在一些诧异,IE浏览器默认不允许目标网站www.huahua.com的本地Cookie在这样的跨域请求中带上,除非在HTTP响应头中设置了P3P,这个响应头告诉浏览器允许网站(恶意网站www.hack.com)跨域请求目标网站A的资源时带上目标网站A的用户本地Cookie。对于非IE浏览器,就没这样的限制
参考学习:https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html
《web前端黑客技术》-前端黑客之CSRF
前端web安全-CSRF基础入门的更多相关文章
- 【转】前端Web开发MVC模式-入门示例
前端Web开发MVC模式-入门示例 MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:cont ...
- 前端Web开发MVC模式-入门示例
MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:control为servlet程序控制跳转和 ...
- 2020年数据库概念与MySQL的安装与配置-从零基础入门MySQL-mysql8版本
作者 | Jeskson 来源 | 达达前端小酒馆 从零基础入门MySQL数据库基础课 数据的概念,简介,安装与配置,Windows平台下MySQL的安装与配置. 数据库的概念:数据库是一个用来存放数 ...
- [转]前端利器:SASS基础与Compass入门
[转]前端利器:SASS基础与Compass入门 SASS是Syntactically Awesome Stylesheete Sass的缩写,它是css的一个开发工具,提供了很多便利和简单的语法,让 ...
- WebSocket.之.基础入门-前端发送消息
WebSocket.之.基础入门-前端发送消息 在<WebSocket.之.基础入门-建立连接>的代码基础之上,进行添加代码.代码只改动了:TestSocket.java 和 index. ...
- 2019年最新超级有趣好玩的html+css网页布局课程,前端入门基础,html5+css3零基础入门课程-黑马程序员pink老师精心录制
大家好,我是黑马程序员pink老师!! 本次视频是前端零基础入门的课程,pink老师采取有趣好玩讲法,带你快乐的学习枯燥的html+css知识,学完之后让你能快速布局pc端页面.代码也可以讲的好玩有趣 ...
- Nginx web基础入门
目录 Nginx web基础入门 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 日志格式 game日志记录实战 日志切割 手写虚拟 ...
- Nginx Web 基础入门
目录 Nginx Web 基础入门 Nginx快速安装 两种方式部署Nginx 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 虚拟 ...
- Web安全之Web 安全介绍与基础入门知识
web安全介绍与基础入门知识 安全与安全圈 甲方与乙方 甲方:如腾讯,阿里等需要安全服务的公司 乙方:提供安全服务产品的服务型安全公司 web与二进制 web,研究web安全 二进制,研究如客户端安全 ...
随机推荐
- C# 面试前的准备_基础知识点的回顾_02
1.数据库的范式 这算入门问题了吧,但凡是个数据库类的,都得问吧, 但我们在回答的时候开始背书啦 第一范式(1NF)无重复的列 第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ] 第三范 ...
- cao 啥时候能系统地复习一下数据结构 我光学数学去了
最近有功夫的话再敲敲数据结构复习复习
- 最新主流 Markdown 编辑器推荐
Markdown ,2004年由 John Gruberis 设计和开发,是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,以下将介绍目前比较流行的一 ...
- D. Yet Another Problem On a Subsequence 解析(DP)
Codeforce 1000 D. Yet Another Problem On a Subsequence 解析(DP) 今天我們來看看CF1000D 題目連結 題目 略,請直接看原題 前言 這題提 ...
- Apache POI 合并单元格--简单解释版带Demo
合并单元格所使用的方法: sheet.addMergedRegion( CellRangeAddress cellRangeAddress ); CellRangeAddress 对象的构造 ...
- mysql报错10061和10038
用navicat连接报错10038,用sqlyog报错10061,又去查看服务,发现服务丢失 经过一系列的查阅资料,用下面的方式解决了问题 1.用管理员的方式打开命令行窗口 2.进入mysql的bin ...
- ERP收付款的操作与设计--开源软件诞生22
赤龙ERP收款付款讲解--第22篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...
- Object of type Decimal is not JSON serializable
json遇到Decimal 型数据无法正确处理 解决方案 import json result = [ {'name': '小红', 'age': 26, 'balance': decimal.Dec ...
- Python3网络学习案例三:编写web server
1. 写在前面 这里总结的并不够详细,有时间了再进行补充. 2. 设计思路 HTTP协议是建立在TCP上的1. 建立服务器端TCP套接字(绑定ip,port),等待监听连接:listen(2. 打开浏 ...
- 红帽6.9搭建yum源的2种方式(HTTP和本地)
方式一:HTTP搭建 1.首先删除本身所带的yum `rpm -qa | grep yum | xargs rpm -e --nodeps ` #忽略依赖关系,强行删除 若出现 错误出现 将后面的 ...