原文地址:Web 漏洞分析与防御之 CSRF(二)

博客地址:http://www.extlight.com

一、全称

跨站请求伪造(Cross-site Request Forgery)

二、原理

在用户登陆目标网站后,后端会返回用户登陆的凭证到前端(浏览器的 cookie)。攻击者诱使用户点击某个超链接,该超链接会发送恶意请求(会携带用户的 cookie),从而冒充用户完成业务请求(发帖、盗取用户资金等)。

三、攻击方式

笔者以网站的发帖功能为案例对 CSRF 攻击进行简单的讲解。

3.1 提交 form 表单

下图为模拟攻击演示图:

以下是演示图中,"CSRF 攻击.html" 文件的源码。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title>
</head>
<body>
<script type="text/javascript">
document.write(`
<form id="myForm" name="myForm" target="csrf"
method="post" action="http://localhost:8080/article/save">
<input type="hidden" name="userName" value="李四" />
<textarea name="content">表单攻击</textarea>
</form>
`); var iframe = document.createElement("iframe");
iframe.name = "csrf";
iframe.style.display = "none";
document.body.appendChild(iframe); setTimeout(function() {
document.getElementById("myForm").submit();
},1000);
</script>
</body>
</html>

实际案例中,攻击者会先了解目标网站请求的 url,通过诱惑登陆用户点击某个超链接,该链接指向类似上文的 html 页面(第三方网站)。因为是用户在自己浏览器点击的超链接,因此会自动携带用户浏览器中的 cookie,这样在第三方网站就可以冒充用户发起请求。

3.2 点击超链接

如果目标网站允许 get 请求,可通过超链接攻击。如下图:

超链接源码如下:

<a href="http://localhost:8080/article/save?userName=李四&content=超链接攻击">点击获取现金大奖</a>

3.3 加载图片方式

更加粗暴的方式就是通过图片发送请求,如下图:

图片源码如下:

<img src="http://localhost:8080/article/save?userName=李四&content=图片攻击" />

四、防御

CSRF 攻击的一个特点是绕过目标网站的前端页面(无法获知页面的信息,如:验证码,token),在第三方网站发送请求到目标网站后端。

4.1 禁止第三方网站携带 cookie

在网站后端,用户登陆功能的代码中,设置 cookie 的 SameSite 的值为 Strict 返回给浏览器。

缺点:目前只有 chrome 和 opera 支持该属性。

4.2 使用验证码

以论坛发帖为例,在发帖时,设置一个验证码,发帖后在后端进行校验。CSRF 攻击没法获取到验证码,从而目标网站得到了防御。

4.3 使用 token

继续以论坛发帖为例,在论坛后端跳转发帖页面的代码中随机生成一个 N 位数的数字/字符串作为 token,设置到 cookie 和任意变量名的变量中(最终放入到前端的 form 表单中)。当用户在页面发帖后,后端接收和校验 cookie 中的 token 和 页面提交的 token 是否一致。如果一致,则说明是用户合法操作。

4.4 判断 referer

referer 是 http 的请求头,用户发送请求后,在后端获取该请求头,判断它的值是否包含目标网站的域名。如果包含说明操作合法。

五、参考资料

Web 漏洞分析与防御之 CSRF(二)的更多相关文章

  1. Web 漏洞分析与防御之点击劫持(三)

    原文地址:Web 漏洞分析与防御之点击劫持(三) 博客地址:http://www.extlight.com 一.全称 点击劫持,顾名思义,用户点击某个按钮,却触发了不是用户真正意愿的事件. 二.原理 ...

  2. Web 漏洞分析与防御之 XSS(一)

    原文地址:Web 漏洞分析与防御之 XSS(一) 博客地址:http://www.extlight.com 一.全称 跨站脚本攻击(Cross Site Scripting) 二.原理 通过在网站中的 ...

  3. FakeID签名漏洞分析及利用(二)

    本文转自:http://blog.csdn.net/l173864930/article/details/38409521 继上一次Masterkey漏洞之后,Bluebox在2014年7月30日又公 ...

  4. web服务器分析与设计(二)

    面向对象分析与设计第二步:寻找对象,建立问题域模型 1,用例场景描述 接上一篇中的用例,编写用例场景 U1: 上网者:打开网站(www.xxx.com) 浏览器:连接网站 目标系统:接受连接 检查连接 ...

  5. web前后端分离漏洞分析防御

    web前后端分离漏洞分析防御 漏洞分析,主要漏洞有 一.跨站脚本攻击XSS 程序 + 数据 = 结果:攻击后,数据夹杂一部分程序(执行代码),导致结果改变: 1.XSS攻击注入点 (a):HTML节点 ...

  6. 三位一体的漏洞分析方法-web应用安全测试方法

    本文转自乌云知识库 0x00 前言 节选自: http://www.owasp.org.cn/OWASP_Conference/owasp-20140924/02OWASPWeb20140915.pd ...

  7. 黑客攻防技术宝典Web实战篇(二)工具篇DVWA Web漏洞学习

    DVWA是一个学习Web漏洞的很好的工具. DVWA全程是Damn Vulnerable Web Application,还有一个跟它一样好的工具尽在http://www.360doc.com/con ...

  8. [WEB安全]phpMyadmin后台任意文件包含漏洞分析(CVE-2018-12613)

    0x00 简介 影响版本:4.8.0--4.8.1 本次实验采用版本:4.8.1 0x01 效果展示 payload: http://your-ip:8080/index.php?target=db_ ...

  9. 十大常见web漏洞及防范

    十大常见web漏洞 一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了 ...

随机推荐

  1. 012PHP基础知识——运算符(五)

    <?php /** * 运算符的短路: * && 逻辑与 || 逻辑或 存在短路: */ /* $a = 1; $a==1 ||$c=100; //逻辑或:第一个表达式返回tru ...

  2. Java静态绑定和动态绑定

    程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定 静态绑定(早绑定 编译器绑定): 在程序执行前方法 ...

  3. c# 处理js序列化时 datetime返回UTC格式的问题

    using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using Syst ...

  4. [AirFlow]AirFlow使用指南一 安装与启动

    1. 安装 通过pip安装: xiaosi@yoona:~$ pip install airflow 如果速度比较慢,可以使用下面提供的源进行安装: xiaosi@yoona:~$ pip insta ...

  5. iOS开发之解决WebView自适应内容高度

    这段时间写的项目中,有涉及到根据后端上传的表单内容,然后在移动端将内容排版重新展示的功能点,所以小小的写一下解决办法. 首先如果直接进行内容展示,或者进行sizeToFit的操作,那么可能会造成图片超 ...

  6. [Python] RuntimeError: Invalid DISPLAY variable

    1.问题:在本地用matplotlib绘图可以,但是在ssh远程绘图的时候会报错 RuntimeError: Invalid DISPLAY variable 2.原因:matplotlib的默认ba ...

  7. nodejs返回接口给前端

    1.修改app.js文件,将其中的user路由去掉. 2.在index路由中配置如下:   router.all('*', function(req, res, next) { res.header( ...

  8. 【剑指offer】求1+2+…+n,C++实现

    原创博文,转载请注明出处! # 题目 # 思路 使用递归计算累加,利用逻辑与的短路特性终止递归.逻辑与的短路特性 : A&&B,A>0时,执行B:A=0时,不执行B. # 代码 ...

  9. 模仿python中的range功能

    主要是利用生成器来写的一个函数: def myxrange(start, stop = None, step = 1): #这里的stop一定要等于None,不能等于0,要不然会有好多问题 if st ...

  10. 在 Visual Studio中 使用Apache Cordova 开发安卓、iOS程序(自定义图标和闪屏)

    方法1 1台安装有linux的电脑,虚拟机也行,并安装imagemagick软件包.我用的是linux mint,直接在软件管理器中安装即可 把https://github.com/shamork/c ...