CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。

CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。
包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…
造成的问题:个人隐私泄露以及财产安全。

如果你的验证信息存储在 cookie 中,你有隐式的状态管理。“已登入”状态由一个 cookie 控制,并且这个 cookie 在每个页面的请求中都会发送。不幸的是,在第三方站点触发的请求中也会发送这个 cookie 。如果你不注意这点,一些人可能会通过社会工程学来诱导你应用的用户在他们不知道的情况下做一些蠢事。

比如你有一个指定的 URL ,当你发送 POST 请求时会删除一个用户的资料(比如 http://example.com/user/delete 。如果一个攻击者现在创造一个页面来用 JavaScript 发送这个 post 请求,他们只是诱骗一些用户加载那个页面,而他们的资料最终会被删除。

CSRF攻击示意图

想象你在运行 Facebook ,有数以百万计的并发用户,并且某人放出一些小猫图片的链接。当用户访问那个页面欣赏毛茸茸的猫的图片时,他们的资料就被删除。

防止 CSRF 攻击

你怎样才能阻止这呢?基本上,对于每个修改服务器上内容的请求,你应该使用一次性令牌,并存储在 cookie 里, 并且 在发送表单数据的同时附上它。 在服务器再次接收数据之后,你要比较两个令牌,并确保它们相等。

步骤

  1. 在客户端向后端请求界面数据的时候,后端会往响应中的 cookie 中设置 csrf_token 的值
  2. 在 Form 表单中添加一个隐藏的的字段,值也是 csrf_token
  3. 在用户点击提交的时候,会带上这两个值向后台发起请求
  4. 后端接受到请求,以会以下几件事件:

从 cookie中取出 csrf_token
从 表单数据中取出来隐藏的 csrf_token 的值
进行对比

  1. 如果比较之后两值一样,那么代表是正常的请求,如果没取到或者比较不一样,代表不是正常的请求,不执行下一步操作

在 Flask 项目中解决 CSRF 攻击

在 Flask 中, Flask-wtf 扩展有一套完善的 csrf 防护体系,对于我们开发者来说,使用起来非常简单
在 FlaskForm 中实现校验

设置应用程序的 secret_key
用于加密生成的 csrf_token 的值

app.secret_key = "#此处可以写随机字符串#"

在模板的表单中添加以下代码

<form method="post">{{ form.csrf_token() }}{{ form.username.label }} {{ form.username }}<br/>{{ form.password.label }} {{ form.password }}<br/>{{ form.password2.label }} {{ form.password2 }}<br/>{{ form.submit }}
</form>

设置完毕,cookie 中的 csrf_token 不需要我们关心,会自动帮我们设置

单独使用

设置应用程序的 secret_key
用于加密生成的 csrf_token 的值

app.secret_key = "#此处可以写随机字符串#"

导入 flask_wtf.csrf 中的 CSRFProtect 类,进行初始化,并在初始化的时候关联 app

from flask.ext.wtf import CSRFProtect
CSRFProtect(app)

如果模板中有表单,不需要做任何事。与之前一样:

<form method="post">{{ form.csrf_token }}...
</form>

但如果模板中没有表单,你仍需要 CSRF 令牌:

<form method="post" action="/"><input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
</form>

exit(?)

防止 跨站请求伪造(CSRF)相关推荐

  1. 跨站请求伪造(CSRF)-简述

    跨站请求伪造(CSRF)-简述 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 ...

  2. 带你刷burpsuite官方网络安全学院靶场(练兵场)之客户端漏洞——跨站请求伪造(CSRF)专题

    介绍 PortSwigger是信息安全从业者必备工具burpsuite的发行商,作为网络空间安全的领导者,他们为信息安全初学者提供了一个在线的网络安全学院(也称练兵场),在讲解相关漏洞的同时还配套了相 ...

  3. django16: csrf跨站请求伪造/CSRF相关装饰器

    CSRF 即跨站请求攻击 跨站请求伪造csrf钓鱼网站本质搭建一个跟正常网站一模一样的页面用户在该页面上完成转账功能转账的请求确实是朝着正常网站的服务端提交唯一不同的在于收款账户人不同给用户书写for ...

  4. csrf防御 php,跨站请求伪造CSRF的防御实例(PHP版本)

    跨站请求伪造CSRF的防御:One-Time Tokens(不同的表单包含一个不同的伪随机值) 在实现One-Time Tokens时,需要注意一点:就是"并行会话的兼容".如果用 ...

  5. 浅谈跨站请求伪造(CSRF)

    浅谈跨站请求伪造(CSRF)   这里简单的记录一下CSRF漏洞~~ 什么是CSRF?   CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可 ...

  6. Nginx配置valid_referer解决跨站请求伪造(CSRF)

    Nginx配置valid_referer解决跨站请求伪造(CSRF) 文章目录 Nginx配置valid_referer解决跨站请求伪造(CSRF) 漏洞说明 漏洞描述 危害等级 修复建议 漏洞复现 ...

  7. 跨站请求伪造CSRF防护方法

    CSRF(Cross-site request forgery跨站请求伪造,也被称成为"one click attack"或者session riding,通常缩写为CSRF或者X ...

  8. 跨站请求伪造(CSRF)+ 跨站脚本攻击(XSS)

    一.CSRF 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 X ...

  9. 跨站请求伪造——CSRF

    目录 csrf与xss的区别 CSRF的介绍 利用过程 实战 靶场下载 过程 一.A用户登录浏览器执行动作 二.B用户抓包制作csrf请求页面 三.本地保存 四.制作钓鱼网站 csrf 防御 csrf ...

  10. Web安全测试---跨站请求伪造CSRF

    跨站请求 伪造 (即CSRF )被Web 安全 界称为诸多漏洞中"沉睡的巨人",其威胁程度由此"美誉"便可见一斑.本文将简单介绍该漏洞,并详细说明造成这种漏洞的 ...

最新文章

  1. Socket Programming on Android
  2. switch中default的用法
  3. 【论文解读】何恺明团队最新力作SimSiam:消除表征学习“崩溃解”,探寻对比表达学习成功之根源...
  4. JavaScript如何中断循环执行?
  5. boost::regex
  6. 文件系统位于服务器,如何访问hadoop文件系统上的文件,该文件系统位于与本地计算机不同的服务器上?...
  7. 将本地SQL Server数据库迁移到Azure SQL数据库
  8. 7名高管、半数员工离职,如何再造乔布斯重返苹果神话?
  9. HBase 源码解析
  10. 最新NVIDIA英伟达GPU显卡算力表
  11. 计算机拓扑结构网状图,网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)...
  12. php输出次方,php如何实现数值的整数次方(代码实例)
  13. python中最小公倍数函数_Python 最小公倍数算法
  14. 第二组第一次成团哈哈哈哈
  15. Pandas读取某一列(特定列,指定列)为列表
  16. 字符 字符串 字符数组 字符串指针 指针数组
  17. 利用gplaycli下载apk
  18. 用 JS(JavaScript )实现增删改查
  19. 水压机机械液压驱动控制系统
  20. Pascal正常血压

热门文章

  1. 学习参考《深度实践Spark机器学习》PDF+吴茂贵
  2. 暴力破解wifi密码尝试
  3. [二维压缩] | 图像游程编码
  4. python get rect 函数_Pygame:如何正确使用get_rect()
  5. mac电脑网游加速器哪个好用?网易uu网游加速器分享
  6. H5支付、支付宝支付
  7. vtk读取.dcm文件(医学影像文件)
  8. Kafka消息队列原理总结
  9. IT简历写作注意事项
  10. 博图可以用c语言编程吗,S7300能用C语言编程吗?