安全相关,CSRF
先说下CSRF的定义
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。[1] 跟跨網站指令碼(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任
简单点说,CSRF 就是利用用户的登录态发起恶意请求。
通过一个故事来介绍csrf
这是最近在知乎上看到的一个例子十分形象(由于是微信内分享,我现在找不到链接了,直接把故事内容补上吧)
防盗系统启动
妈妈: 给我看着衣服呀
小孩: 好的
小偷来了
正常工作:
小孩: 你是谁?
小偷: 我是张三
小孩:妈妈,有人偷衣服
妈妈: 谁?
小孩: 张三
小偷被抓
漏洞:
小孩: 你是谁?
小偷: 我叫逗你玩
小孩: 妈妈有人偷衣服呀
妈妈: 谁?
小孩: 逗你玩
妈妈: ...
csrf是让用户住不知情的情况下,冒用其身份发起了一个请求
小偷: 你妈妈喊你去买洗衣粉
如何攻击

假设网站中有一个通过 Get 请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
如果接口是 Post 提交的,就相对麻烦点,需要用表单来提交接口
<html>
<head>
<script type="text/javascript">
function steal()
{
  iframe = document.frames["steal"];
iframe.document.Submit("transfer");
}
</script>
</head> <body onload="steal()">
<iframe name="steal" display="none">
<form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
<input type="hidden" name="toBankId" value="11">
<input type="hidden" name="money" value="1000">
</form>
</iframe>
</body>
</html>
如何防御
防范 CSRF 可以遵循以下几种规则:
- Get 请求不对数据进行修改
 - 不让第三方网站访问到用户 Cookie
 - 阻止第三方网站请求接口
 - 请求时附带验证信息,比如验证码或者 token
 
SameSite
可以对 Cookie 设置 SameSite 属性。该属性设置 Cookie 不随着跨域请求发送,该属性可以很大程度减少 CSRF 的攻击,但是该属性目前并不是所有浏览器都兼容。
验证 Referer
对于需要防范 CSRF 的请求,我们可以通过验证 Referer 来判断该请求是否为第三方网站发起的。
在后台接收到请求的时候,可以通过请求头中的Referer请求头来判断请求来源
Token
服务器下发一个随机 Token(算法不能复杂),每次发起请求时将 Token 携带上,服务器验证 Token 是否有效。
node可以使用 csurf中间件来防御csrf攻击
var cookieParser = require('cookie-parser')
var csrf = require('csurf')
var bodyParser = require('body-parser')
var express = require('express')
// setup route middlewares
var csrfProtection = csrf({ cookie: true })
var parseForm = bodyParser.urlencoded({ extended: false })
// create express app
var app = express()
// parse cookies
// we need this because "cookie" is true in csrfProtection
app.use(cookieParser())
app.get('/form', csrfProtection, function (req, res) {
  // pass the csrfToken to the view
  res.render('send', { csrfToken: req.csrfToken() })
})
app.post('/process', parseForm, csrfProtection, function (req, res) {
  res.send('data is being processed')
})
在页面模板视图中(取决于您的模板语言;在这里演示了handlebar风格),将csrfToken值设置为一个名为_csrf的隐藏输入字段的值:
<form action="/process" method="POST">
<input type="hidden" name="_csrf" value="{{csrfToken}}"> Favorite color: <input type="text" name="favoriteColor">
<button type="submit">Submit</button>
</form>
当通过ajax访问受保护的路由时,csrf令牌需要在请求中传递。通常,这是使用一个请求头来完成的,因为添加一个请求头通常可以在不进行有效负载修改的情况下在中心位置完成。
CSRF令牌从服务器端的req.csrftoken()调用中获得。这个令牌需要向客户端公开,通常是将其包含在初始页面内容中。一种可能是将它存储在一个HTML的标签中,在这个标签中,可以在请求的时候通过JavaScript检索值。
<meta name="csrf-token" content="{{csrfToken}}">
下面是一个使用Fetch API从页面上的标签中使用CSRF令牌发送到/进程路由的示例:
// Read the CSRF token from the <meta> tag
var token = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); // Make a request using the Fetch API
fetch('/process',{
credentials:'same-origin', // includes cookies in the request
headers:{
'CSRF-Token': token // is the csrf token as a header
},
method:'POST',
body:{
data:'data'
}
})
防抓包
使用HTTPS(HTTPS 还是通过了 HTTP 来传输信息,但是信息通过 TLS 协议进行了加密。)替换HTTP,对传输的数据进行加密,这样,当请求的信息被抓包工具抓包后,也无法修改提交的数据.
安全相关,CSRF的更多相关文章
- Web安全相关(二):跨站请求伪造(CSRF/XSRF)
		
简介 CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对 ...
 - Django信息安全相关之CSRF和XSS
		
什么是xss攻击 xss攻击:黑客把恶意的JS脚本提交到后端,后端把恶意脚本渲染显示出来 什么是CSRF? 1.你登录建行官网后 你的浏览器就保存了建行网站的cokie,(如果不关闭这个页面c ...
 - Web安全相关(一):CSRF/XSRF(跨站请求伪造)和XSS(跨站脚本)
		
XSS(Cross Site Script):跨站脚本,也就是javascript脚本注入,一般在站点中的富文本框,里面发表文章,留言等表单,这种表单一般是写入数据库,然后再某个页面打开. 防御: 1 ...
 - 渗透日常之 花式实战助你理解CSRF
		
本文作者:i春秋签约作家——onls辜釉 最近比较忙,很久没发文章了,Onls本就只是一个安全爱好者,工作也不是安全相关.以往的文章也更像是利用简单漏洞的“即兴把玩”,更多的是偏向趣味性,给大家增加点 ...
 - 防盗链&CSRF&API接口幂等性设计
		
防盗链技术 CSRF(模拟请求) 分析防止伪造Token请求攻击 互联网API接口幂等性设计 忘记密码漏洞分析 1.Http请求防盗链 什么是防盗链 比如A网站有一张图片,被B网站直接通过img标签属 ...
 - 【网络安全】——客户端安全(浏览器安全、XSS、CSRF、Clickjacking)
		
 近在学习网络安全相关的知识,于是先从业内一本系统讲Web安全的书<白帽子讲Web安全>系统学习Web安全的相关知识.在此整理书中的知识层次,不求详尽,只求自己对整个Web安全梗概有所了 ...
 - 面试 07-安全问题:CSRF和XSS
		
07-安全问题:CSRF和XSS #前言 面试中的安全问题,明确来说,就两个方面: CSRF:基本概念.攻击方式.防御措施 XSS:基本概念.攻击方式.防御措施 这两个问题,一般不会问太难. 有人问: ...
 - 保护ASP.NET 应用免受 CSRF 攻击
		
CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/ ...
 - ABP理论之CSRF
		
返回总目录 本篇目录 介绍 ASP.NET MVC ASP.NET WEB API ASP.NET Core[以后补上] 客户端类库 内部原理 介绍 CSRF[Cross-Site Request F ...
 
随机推荐
- hdu 5100 Chessboard (额,,,,,就叫它趣味数学题吧)
			
题意: 用K*1的砖块去覆盖N*N的大矩形,问最多能覆盖多少块. 详细证明:(转载自matrix67) Matrix67: The Aha Moments 趣题:用 k × 1 的矩形覆盖 n × n ...
 - loto仪器_如何模拟输出凸轮轴和曲轴波形_用任意波形信号源SIG852?
			
loto仪器_如何模拟输出凸轮轴和曲轴波形_用任意波形信号源SIG852? 在汽车传感器的波形检测应用中,有时候需要模拟各种汽车传感器的输出信号,用来驱动和监测对应的执行机构或者电路是否正常,这其中, ...
 - VulnHub-[DC-8-9]-系列通关手册
			
DC8-通关手册 DC-8是另一个专门构建的易受攻击的实验室,目的是在渗透测试领域积累经验. 这个挑战有点复杂,既是实际挑战,又是关于在Linux上安装和配置的两因素身份验证是否可以阻止Linux服务 ...
 - Spring Cloud Alibaba 使用Feign进行服务消费
			
为什么使用Feign? Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样.你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做. 使用Fei ...
 - Fiddler抓包工具简介:(一)认识Fiddler
			
认识Fiddler Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据(指coo ...
 - IDEA中三种注释方式的快捷键
			
三种注释方式 行注释.块注释.方法或类说明注释. 一.快捷键:Ctrl + / 使用Ctrl+ /, 添加行注释,再次使用,去掉行注释 二.演示代码 if (hallSites != null ...
 - 大爽Python入门教程 0-4 安装Pycharm
			
大爽Python入门公开课教案 点击查看教程总目录 安装重量级IDE--Pycharm 一 下载 下面步骤1,2中网络卡顿的朋友, 请直接前往步骤3来下载. 使用搜索引擎搜索Pycharm, 打开搜索 ...
 - 菜鸡的Java笔记 生产者与消费者
			
生产者与消费者 代码要求知道做什么用即可 线程间的通讯问题以及 Object 类的支持 基础模型 现在希望实现一种数据的生产和取出的操作 ...
 - [cf1261E]Not Same
			
问题可以这么理解-- 构造一个$n+1$行$n$列的01矩阵$A$,满足: 1.第$i$列$n+1$个数的和为$a_{i}$ 2.任意两行不完全相同 (对应关系:第$i$行第$j$列为1当且仅当第$i ...
 - [atARC110F]Esoswap
			
先构造使得$p_{i}$降序(即$p_{i}=n-1-i$),只需要从后往前,不断执行$i$操作直至合法即可 正确性的证明:首先保证了$[0,n-i)$这些数字都已经出现,因此操作不会破坏已确定的数字 ...