原文地址: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. 十九 Python分布式爬虫打造搜索引擎Scrapy精讲—css选择器

    css选择器 1. 2. 3.  ::attr()获取元素属性,css选择器 ::text获取标签文本 举例: extract_first('')获取过滤后的数据,返回字符串,有一个默认参数,也就是如 ...

  2. Gruntjs提高生产力(四)

    思考: 1.grunt以工程为单位安装插件? 如果有新工程就要重新安装插件或者把安装好的插件拷贝过去.这样很麻烦,解决方案是需要用grunt的项目统一放在grunt项目中. 2.每次需要针对项目编写g ...

  3. Mac下新安装的MySQL无法登陆root用户解决方法

      一 设置MySQL命令行搜索路径 0.苹果->系统偏好设置->最下边点mysql 在弹出页面中 启动mysql服务 1.打开终端,输入: sudo vi ~/.bash_profile ...

  4. spring --解析自定义注解SpringAOP(配合@Aspect)

    1:首先,声明自定义注解 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface DtT ...

  5. Yii2学习笔记:汉化yii,设置表单的描述(属性标签attributeLabels)

    一:汉化框架 框架汉化在这里设置,如果不生效,前台后台的配置文件都设置下应该就可以了 二:汉化表单 汉化表单,直接在模型层设置,例如: 原来的联系我们表单 汉化后: ] 这种汉化在哪里修改呢?其实是设 ...

  6. Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量。

    myeclipse和eclipse集成编译软件,都提供了一个快捷键用来批量重命名变量:Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量.扩展知识:如果想要重命名文件名,又不想手动 ...

  7. mysql连接踩坑

    本机安装的是wamp,集成了mysql.php.apache.安装了sqlyog客户端. 1.错误代码2003 证明mysql服务没有开启,此时需要开启mysql服务,开启了wamp 2.错误代码10 ...

  8. 機器學習基石 机器学习基石(Machine Learning Foundations) 作业2 第10题 解答

    由于前面分享的几篇博客已经把其他题的解决方法给出了链接,而这道题并没有,于是这里分享一下: 原题: 这题说白了就是求一个二维平面上的数据用决策树来分开,这就是说平面上的点只能画横竖两个线就要把所有的点 ...

  9. jquery动态增加或删除tr和td【实际项目】

    难点: (1)动态增加.删除tr和td (2)每天tr和td都有下标,且下标要动态变化, (3)tr和td为什么下标不能随便写,原因是此处需要把所有tr中的数据以list的形式发送到后台对象中,所有每 ...

  10. js缓动函数

    tween: { easeInQuad: function(pos){ return Math.pow(pos, 2); }, easeOutQuad: function(pos){ return - ...