前言

今天找了个新地方进行学习 嘿嘿  采光不错!特别适合看书呢。

前言

1.CSRF

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

2.漏洞危害

是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)
利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等

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参与,请求是身份认证后的

  1. 跨域发出一个GET请求
  2. 可以无javascript参与
  3. 请求是身份认证后的

实例演示.

漏洞网站: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基础入门的更多相关文章

  1. 【转】前端Web开发MVC模式-入门示例

    前端Web开发MVC模式-入门示例 MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:cont ...

  2. 前端Web开发MVC模式-入门示例

    MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:control为servlet程序控制跳转和 ...

  3. 2020年数据库概念与MySQL的安装与配置-从零基础入门MySQL-mysql8版本

    作者 | Jeskson 来源 | 达达前端小酒馆 从零基础入门MySQL数据库基础课 数据的概念,简介,安装与配置,Windows平台下MySQL的安装与配置. 数据库的概念:数据库是一个用来存放数 ...

  4. [转]前端利器:SASS基础与Compass入门

    [转]前端利器:SASS基础与Compass入门 SASS是Syntactically Awesome Stylesheete Sass的缩写,它是css的一个开发工具,提供了很多便利和简单的语法,让 ...

  5. WebSocket.之.基础入门-前端发送消息

    WebSocket.之.基础入门-前端发送消息 在<WebSocket.之.基础入门-建立连接>的代码基础之上,进行添加代码.代码只改动了:TestSocket.java 和 index. ...

  6. 2019年最新超级有趣好玩的html+css网页布局课程,前端入门基础,html5+css3零基础入门课程-黑马程序员pink老师精心录制

    大家好,我是黑马程序员pink老师!! 本次视频是前端零基础入门的课程,pink老师采取有趣好玩讲法,带你快乐的学习枯燥的html+css知识,学完之后让你能快速布局pc端页面.代码也可以讲的好玩有趣 ...

  7. Nginx web基础入门

    目录 Nginx web基础入门 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 日志格式 game日志记录实战 日志切割 手写虚拟 ...

  8. Nginx Web 基础入门

    目录 Nginx Web 基础入门 Nginx快速安装 两种方式部署Nginx 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 虚拟 ...

  9. Web安全之Web 安全介绍与基础入门知识

    web安全介绍与基础入门知识 安全与安全圈 甲方与乙方 甲方:如腾讯,阿里等需要安全服务的公司 乙方:提供安全服务产品的服务型安全公司 web与二进制 web,研究web安全 二进制,研究如客户端安全 ...

随机推荐

  1. Python核心编程之生成器

    生成器 1. 什么是生成器 大家知道通过列表生成式(不知道的可自行百度一下),我们可以直接创建一个列表,但是,受内存限制,列表内容肯定是有限的.比如我们要创建一个包含100万个元素的列表,这100万个 ...

  2. python 微信小程序自动化

    微信小程序自动化 https://www.cnblogs.com/yyoba/python27 - FautoTesthttps://www.cnblogs.com/yyoba/p/9973731.h ...

  3. C# 将dataset数据导出到excel中

    //添加引用 NPOI.dll //添加 using NPOI.HSSF.UserModel; /// <summary> /// 导出数据到Excel /// </summary& ...

  4. 【Azure微服务 Service Fabric 】因证书过期导致Service Fabric集群挂掉(升级无法完成,节点不可用)

    问题描述 创建Service Fabric时,证书在整个集群中是非常重要的部分,有着用户身份验证,节点之间通信,SF升级时的身份及授权认证等功能.如果证书过期则会导致节点受到影响集群无法正常工作. 当 ...

  5. 通过maven创建springboot项目

    1,idea选择创建一个maven项目 2,pom.xml <dependencies> <dependency> <groupId>org.springframe ...

  6. B. Once Again... 解析(思維、DP、LIS、矩陣冪)

    Codeforce 582 B. Once Again... 解析(思維.DP.LIS.矩陣冪) 今天我們來看看CF582B 題目連結 題目 給你一個長度為\(n\)的數列\(a\),求\(a\)循環 ...

  7. Java学习的第四十八天

    1.例8.4找出整形数组中的最大值 import java.util.Scanner; public class Cjava { public static void main(String[]arg ...

  8. 被巴菲特看中的Snowflake,是怎样深刻改变云计算产业的?

    众所周知,在很长一段时间里,巴菲特都从来不碰科技股.但人总是会变的,他在2016年开始首次持仓苹果,并在此后一再增持,目前苹果为伯克希尔第一大重仓股. 前不久,巴菲特持股了人生中的又一家科技公司--S ...

  9. 一文搞懂后台高性能服务器设计的常见套路, BAT 高频面试系列

    微信搜索「编程指北」,关注这个写干货的程序员,回复「资源」,即可获取后台开发学习路线和书籍 先赞后看,养成习惯~ 前言 金九银十,又是一年校招季. 经历过,才深知不易.最近,和作为校招面试官的同事聊了 ...

  10. 多服务器使用Docker设置一主一从三哨兵redis(完整)

    本来应该续之前那篇博客Docker配置redis哨兵模式--多服务器·上写一个下篇的,但是忽然意识到应该将必要的环境打包为一个基础镜像,在此基础上建立与redis有关的镜像,这样既能够快速打包,又能够 ...