csrf攻击与防范
CSRF(Cross Site Request Forgeries)跨网站请求伪造,也叫XSRF,通过伪装来自受信任用户的请求来攻击利用受信任网站。
与对比
- xss:本网站运行了来自其它网站的脚本
- csrf:其它网站对本网站产生了影响
一、攻击
利用用户登录态伪造http请求。
危害:
- 盗取用户资金(网上银行,购物)
- 冒充用户发帖(广告帖)
- 损坏网站名誉
1、 get攻击
最简单的CSRF攻击:
- 用户Alice登录访问某有csrf漏洞的银行网站http://www.examplebank.com。
- Alice被某些信息诱导访问危险网站B。
- 危险网站B上有一个<img>标签<img src="http://www.examplebank.com/from=Alice&amount=100&to=Bob">
- 这个img标签的src不指向图片,而是一个http请求,这个请求让银行服务器从Alice转100到Bob账户上,由于Alice已经登录,浏览器发请求时候会带上cookie骗取服务器信任得到响应。
- 这样Alice的钱就被悄悄转走了。
<a href="http:xxx.com/xxx">点击</a>
<img src="http:xxx.com/xxx">
网络蠕虫。
涉及敏感操作的请求改为POST请求。
2、post攻击
危险网站伪造一个隐藏的表单,在onload事件中,触发表单的提交事件。
为防止跳转,可以加一个隐藏的iframe,在iframe中处理提交的请求。
二、防范
伪造http请求特点:
- B网站向A网站请求
- 带A网站Cookies,但是B拿不到cookie,也看不到cookie内容
- 不访问A网站前端
- referer为B网站
1、禁止第三方网站带Cookies
same-site属性:Strict,Lax
header('Set-Cookie: test=12345; SameSite=Lax')
缺点:兼容性
2、验证码
B 不访问A网站前端,所以在A前端页面加入随机验证码来识别请求是不是用户主动发起的。B网站无法伪造一个完整请求。
node中ccap模块可以生成验证码:npm install ccap
优点:简单粗暴,低成本,可靠。
缺点:用户不友好。每次都要填,验证码输入错误要重填。
3、使用内置隐藏变量
服务器生成一串不重复的随机数,用md5编码后【也可以cookie hash生成】,一份存在session中,一份放在隐藏域中随请求提交。B不访问A网站前端所以拿不到token,也没办法拿到cookie中的token。
可以存session,也可以存cookie。。
var csrfToken=parseInt(Math.random()*9999999,10);
ctx.cookies.set('csrfToken',csrfToken);
缺点:没法处理ajax请求。
也可以存在页面的meta中。【处理ajax请求】
<meta name="csrf_token" content="4374023">
缺点:用户打开很多个窗口,只有最后一个页面能成功提交,前面页面会出错,因为cookie中只能存一个tooken。
4、检查网页来源
referer是HTTP请求头,包含请求来源地址。【正确单词是referrer,但是规范中就是错的】
服务器知道正确来源。 验证referer禁止来自第三方网站的请求。
req.headers.referer拿到。
file本地协议访问和http协议访问有点不一样,不会发送referer。
if(referer.indexof('localhost')===-1){
throw new Error('非法请求');
}
检查post提交时候的来源,来源不正确进行清空数据,返回403提示等错误处理。
问题:
B网站后面加上http://127.0.0.1:4200/csrf.html?haha=localhost。就可以匹配成功了。
解决:用正则去匹配。
if(/^https?:\/\/localhost/.test(referer)){
}
缺点:有些浏览器允许用户指定没有referer。需要对referer为空时候进行取舍,要不要通过。
Referer值会记录访问来源,有些用户认为侵犯自己隐私权,有些用户可能会开启浏览器防止跟踪功能,不提供Referer,导致正常用户请求被拒绝。
本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/9043393.html 有问题欢迎与我讨论,共同进步。
csrf攻击与防范的更多相关文章
- CSRF攻击原理解析与对策研究
1.引言 跨站点请求伪造(Cross—Site Request Forgery).以下简称CSRF.是一种广泛存在的网站漏洞.Gmail.YouTube等著名网站都有过CSRF漏洞.甚至包 ...
- 7.CSRF攻击和文件上传漏洞攻击
一.CSRF攻击及防范措施 1.概念 请求来源于其他网站,请求并不是用户的意愿,而是伪造的请求,诱导用户发起的请求 2.场景 攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以 ...
- php web开发安全之csrf攻击的简单演示和防范(一)
csrf攻击,即cross site request forgery跨站(域名)请求伪造,这里的forgery就是伪造的意思.网上有很多关于csrf的介绍,比如一位前辈的文章浅谈CSRF攻击方式,参考 ...
- 来了解并防范一下CSRF攻击提高网站安全
看一下我从网上找的原理图,结合举例描述,多看一遍你就知道怎么回事了. CSRF是什么呢?CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具 ...
- 网络XSS攻击和CSRF攻击原理及防范
网络XSS攻击和CSRF攻击原理及防范 原文地址:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产 ...
- 如何防范CSRF攻击
上一篇文章了解了一下CSRF和XSS的区别,那么这次我们来看看怎么防范CSRF吧 首先,从上篇文章我们可以看得出,CSRF攻击是有着限制的,而我们可以使用这个限制来对他做相关的防范 方法1:后端在接收 ...
- xss和csrf攻击
xss(cross site scripting)是一种最常用的网站攻击方式. 一.Html的实体编码 举个栗子:用户在评论区输入评论信息,然后再评论区显示.大概是这个样子: <span> ...
- CSRF攻击与防御
CSRF是什么 CSRF在百度百科中是这么说的:“CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session ridin ...
- XSS攻击&SQL注入攻击&CSRF攻击?
- XSS(Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式.跨站脚本攻击分有两种形式:反射型攻击(诱使用户点击一个嵌入恶意 ...
随机推荐
- Java序列化Serializable和Externalizable
纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹 什么是Java序列化?为什么出现Java序列化?怎样实现Java序列化? 一.什么是Java序列化 ...
- 用CSS指定外部链接的样式
大部分的信息类网站,比如维基百科,都会对外部链接(<a>标签)指定特定的样式.作为用户,一眼就知道该链接是指向另一个站点的资源是很好的体验.许多网站在服务器端做外部链接检查,添加一个`re ...
- PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡)
下列公式中,A代表了上面图层像素的色彩值(A=像素值/255),B代表下面图层像素的色彩值(B=像素值/255),C代表了混合像素的色彩值(真实的结果像素值应该为255*C).该公式也应用于层蒙板. ...
- FPGrowth 实现
在关联规则挖掘领域最经典的算法法是Apriori,其致命的缺点是需要多次扫描事务数据库.于是人们提出了各种裁剪(prune)数据集的方法以减少I/O开支,韩嘉炜老师的FP-Tree算法就是其中非常高效 ...
- 属性动画之ValueAnimator
原文链接:http://blog.csdn.net/guolin_blog/article/details/43536355
- Leetcode_235_Lowest Common Ancestor of a Binary Search Tree
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/48392713 Given a binary search ...
- asp.net 分布式探讨之Session共享问题
---恢复内容开始--- Session共享是分布式架构设计中的一大难点,尽管session共享的解决方案不少,但是.net 下的解决方案还是比较少,而且说明文档也很少. 之前尝试用memcached ...
- day08_Servlet学习笔记
============================================================ 一.什么是Servlet?(非常非常重要) servlet 是运行在 Web ...
- 《MySQL必知必会》学习笔记_1
#选择数据库 USE mysql #返回可用数据库列表 SHOW DATABASES #返回当前数据库中可用表 SHOW TABLES #返回表列 SHOW COLUMNS FROM db #显示特定 ...
- java并发包分析之———ConcurrentSkipListMap
一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSki ...