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攻击与防范的更多相关文章

  1. CSRF攻击原理解析与对策研究

    1.引言       跨站点请求伪造(Cross—Site Request Forgery).以下简称CSRF.是一种广泛存在的网站漏洞.Gmail.YouTube等著名网站都有过CSRF漏洞.甚至包 ...

  2. 7.CSRF攻击和文件上传漏洞攻击

    一.CSRF攻击及防范措施 1.概念 请求来源于其他网站,请求并不是用户的意愿,而是伪造的请求,诱导用户发起的请求 2.场景 攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以 ...

  3. php web开发安全之csrf攻击的简单演示和防范(一)

    csrf攻击,即cross site request forgery跨站(域名)请求伪造,这里的forgery就是伪造的意思.网上有很多关于csrf的介绍,比如一位前辈的文章浅谈CSRF攻击方式,参考 ...

  4. 来了解并防范一下CSRF攻击提高网站安全

    看一下我从网上找的原理图,结合举例描述,多看一遍你就知道怎么回事了. CSRF是什么呢?CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具 ...

  5. 网络XSS攻击和CSRF攻击原理及防范

    网络XSS攻击和CSRF攻击原理及防范 原文地址:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产 ...

  6. 如何防范CSRF攻击

    上一篇文章了解了一下CSRF和XSS的区别,那么这次我们来看看怎么防范CSRF吧 首先,从上篇文章我们可以看得出,CSRF攻击是有着限制的,而我们可以使用这个限制来对他做相关的防范 方法1:后端在接收 ...

  7. xss和csrf攻击

    xss(cross site scripting)是一种最常用的网站攻击方式. 一.Html的实体编码 举个栗子:用户在评论区输入评论信息,然后再评论区显示.大概是这个样子: <span> ...

  8. CSRF攻击与防御

    CSRF是什么 CSRF在百度百科中是这么说的:“CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session ridin ...

  9. XSS攻击&SQL注入攻击&CSRF攻击?

    - XSS(Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式.跨站脚本攻击分有两种形式:反射型攻击(诱使用户点击一个嵌入恶意 ...

随机推荐

  1. Swift基础之UITabBarController(这是在之前UITableView中直接添加的)

    这些基础内容基本已经可以搭建项目框架,剩下的就是一些优化,细节和数据请求问题,慢慢更新.... 在AppDelegate中创建方法 //创建方法执行UITabBarController func cr ...

  2. 菜鸟玩云计算之二十:saltstack入门初步

    菜鸟玩云计算之二十 SaltStack 入门初步 0. saltstack 是什么 参考下面的文章: http://docs.saltstack.com/en/latest/topics/tutori ...

  3. 《java入门第一季》之面向对象面试题(代码块一网打尽)

    <pre name="code" class="java">/* 代码块:在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同, ...

  4. SpriteBuilder中如何平均拉伸精灵帧动画的距离

    首先要在Timeline中选中所有的精灵帧,可以通过如下2种的任意一种办法达成: 1按下Shift键的同时鼠标单击它们 2鼠标在Timeline空白区拖拽直到拉出的矩形包围住所有精灵帧方块后放开鼠标. ...

  5. didLoadFromCCB方法的调用顺序

    该方法运行顺序和其(包含)继承体系顺序的逆序相同. 这意味着孩子的didLoadFromCCB将总是在其父的didLoadFromCCB之前调用. 比如GameScene.ccb中含有GameMenu ...

  6. 避免"Physics Space Locked"错误

    在一些cocos2d中使用物理引擎的代码中,往往会出现如下错误: Aborting due to Chipmunk error: You cannot manually reindex objects ...

  7. CMake添加-D_DEBUG宏

    Linux下Debug版不会自动添加 _DEBUG宏,只有NDEBUG宏可用. cmake ../src _DCMAKE_BUILD_TYPE=Debug -D_DEBUG 会报错: -D_DEBUG ...

  8. C语言可变参实现参数累加返回

    C语言可变参的作用真的是非常大,自从发表了可变参如何实现printf,fprintf,sprintf的文章以来,便有不少博友私信问我实现的机制,我也解释了相关的知识点.今天,我们借着这个机会,再来举一 ...

  9. IOS微信分享功能简单实现

    PS:此文以简单实现功能为主,不足之前还望指点,大神勿喷. 在此之前如何申请微信认证的Key就不说了,公司一般会有人搞 1.首先下载微信SDK:微信SDK下载地址(更多关于微信SDK信息文档请访问官方 ...

  10. ethtool确定网卡对应的物理网口

    在配置有多个网络接口的设备时我们会犯难,eth0.eth1.--到底是那个接口? 我使用的机器是CentOS系统,打开终端,输入ethtool –help 显示帮助信息,下面我就简要介绍一下最常用的两 ...