Flask使用token来防御csrf跨站攻击

做pytoner工程师很多时候也是需要写web的。 那么你已经会碰到被攻击的危险。比如Csrf攻击,那么csrf是什么我这里就不再详细的描述,我想大家也应该知道。 Flask本身提供了插件,一些社区也在简单的token之上又做了一些关于csrf的防御。

Flask使用token来防御csrf跨站攻击

图中Browse是浏览器,WebServerA是受信任网站/被攻击网站A,WebServerB是恶意网站/攻击网站B。
(1),一开始用户打开浏览器,访问受信任网站A,输入用户名和密码登陆请求登陆网站A。
(2),网站A验证用户信息,用户信息通过验证后,网站A产生Cookie信息并返回给浏览器。
(3),用户登陆网站A成功后,可以正常请求网站A。
(4),用户未退出网站A之前,在同一浏览器中,打开一个TAB访问网站B。
(5),网站B看到有人方式后,他会返回一些攻击性代码。
(6),浏览器在接受到这些攻击性代码后,促使用户不知情的情况下浏览器携带Cookie(包括sessionId)信息,请求网站A。这种请求有可能更新密码,添加用户什么的操作。

从上面CSRF攻击原理可以看出,要完成一次CSRF攻击,需要被攻击者完成两个步骤:

1, 登陆受信任网站A,并在本地生成COOKIE。

2, 在不登出A的情况下,访问危险网站 B。

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了……)

3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

现在常见的csrf防御是有那么几种方式,一种是在表单加上随机token串,一种是附加token的基础上加了refer的来源判断,还有一种是XMLHttpRequest的请求的方式,他可以不用在表单里面加header,但是问题来了,如果你的网站以前经常用的时动态加载的数据,也就是ajax方式加载的,那么很容易用XMLHttpRequest在请求体里面加上先前respone返回token,也有一些超级笨蛋的方法,那就是加验证码,我相信这方法在一个网站不可能每个表单都有,那这样会让人疯掉的。

有朋友用过Django和tornado,他们可以简单的开启csrf防御,实现的方法大同小异,区别就在于封装的程度,后期加入csrf对于项目来说变动大不大而已… …

正体:

Python

@app.before_request def csrf_protect(): if request.method == "POST": token = session.pop('_csrf_token', None) if not token or token != request.form.get('_csrf_token'): abort(403) def generate_csrf_token(): if '_csrf_token' not in session: session['_csrf_token'] = some_random_string() return session['_csrf_token']

在flask的全局变量里面注册 上面那个生成随机token的函数

Python

app.jinja_env.globals['csrf_token'] = generate_csrf_token

在网页的模板是这么引入的 ~

Python

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

分类:默认分类 时间:2012-01-14 人气:7
本文关键词:
分享到:

相关文章

  • Taocms无token导致Csrf-getshell 2015-01-14

    无token,所以可以通过交互管理员进行Csrf-getshell,全程只需要管理员点击一个网页,不知不觉getshell就自动完成了。 后台有编辑文件功能,可以编辑php文件,植入一句话。 且此功能无token限制,导致可以通过一个Csrf交互来getshell. POC如下(如运行不正常,为乌云编辑器所致,将中间的空行删去即可): <form action="http://127.0.0.1/admin/admin.php" method="POST" target="hidden_f

  • CSRF 原理以及 Struts2 令牌校验防御攻略解析 2012-01-03

    struts2 token 不仅能够有效防止表单重复提交,而且还可以进行 CSRF 验证。 CSRF 攻击原理如下图: CSRF 攻击原理图 事实上,B 可能也是一个良性网站,只是被黑客 XSS 劫持了而已。用户实在冤枉啊:我没有上乱七八糟的网站,怎么还是中招了呢? struts2 token 校验原理如图所示: Struts2 token 验证原理图 对照 CSRF 攻击原理图,可以看到,虽然 a.jsp 将这个令牌值返回给浏览器,但是 B 是无法拿到这个令牌的具体值的,或者说 B 只能够通过

  • Discuz!全版本鸡肋CSRF一枚 2012-03-04

    没想到Discuz还存在csrf额,测试的时候发现基本上请求都有带token之类的防止csrf的参数,但是还是被我找到了一处,吼吼。通用型有奖励! 全版本通杀!~ 不得不说dz的csrf几乎么有,这个csrf是收藏论坛板块的功能。 直接get请求的csrf,下面是我本地搭建测试的。 url为 http://www.xxx.com/home.php?mod=spacecp&ac=favorite&type=forum&id=2&handlekey=favoritef

  • 图虫网存储型xss+csrf=rootkit 2012-04-14

    当鸡肋的xss与鸡肋的csrf结合的时候。。。。 0x01.图虫网相册处相册名称未进行转义,可造成存储型xss,盗取用户cookies. 0x02.图虫网创建相册处无token,可通过csrf以用户身份创建账户。 这两个漏洞单看似乎很鸡肋,但是结合起来呢?利用csrf以用户的身份创建有xss脚本的相册(并且还可以以用户身份再发布一条图博使蠕虫进一步扩大),而相册名称又会在首页显示。这样,每次当受害用户访问首页时,xss代码就将被执行一次,用户修改密码也没用,只要一访问首页,新鲜的cookies就

  • espcms后台getshell-3,并可利用csrf交互强制管理员getshell 2012-12-01

    后台修改模板处未过滤,可在模板中插入php代码(此处方便演示,使用了phpinfo) 本来,一个后台getshell的危害应该属于较低的,因为需要管理员权限。但是,espcms后台操作无token,通过csrf的交互,就可以强迫管理员干很多事。修改模板为shell的包如下: 无token,所以可以通过一个自动提交表单给管理员点击,然后就会自动getshell了。(此处主要是后台getshell,csrf就不再说了,详细的POC可以查看我以前提交的一些漏洞) 修复方案: 1.模板中禁止执行PHP,

  • Asp.net CSRF 跨站点请求伪造实现代码 2013-03-03

    本文章介绍了Asp.net CSRF利用 一些小细节现实现跨站点请求伪造实现代码,有需要了解的同学可参考一下。 CSRF,Cross Site Request Forgery,即跨站点请求伪造。 这种攻击是指,在用户正常登录系统以后,攻击者诱使用户访问一些非法链接,以执行一些非法操作。比如:如果删除用户操作(如,yourdomain.com/deluser?id=123)没有经过防范CSRF的处理,那么,假设用户登录系统后,攻击者诱使用户同时访问了攻击者的站点的一个链接(该链接正好为yourdo

  • 中国网络电视台官方CSRF刷微博粉 2013-06-13

    近日随便逛了一下CNTV,找个csrf漏洞。后发现CNTV的reffer对csrf没有效果。 当然也没有看见token来防护csrf。 这里主要是利用来刷个人主页的微博粉。 1.来到CNTV微博,这里先关注个女主播,就选她吧,啧啧,听说是春晚的主持啊,看好你哦美女 2.抓包分析,哈哈,没看到token字段,只有Reffer,那我们就测一下这个reffer有没有对csrf的防护效果吧 3.自己做一个隐藏表单,模拟用户提交:id改成楼主自己的364190xx,让别人“悄悄”关注楼主,刷粉 POC:

  • CSRF漏洞详细说明 2014-04-11

    Cross-Site Request Forgery(CSRF),中文一般译作跨站请求伪造。经常入选owasp漏洞列表Top10,在当前web漏洞排行中,与XSS和SQL注入并列前三。与前两者相比,CSRF相对来说受到的关注要小很多,但是危害却非常大。 通常情况下,有三种方法被广泛用来防御CSRF攻击:验证token,验证HTTP请求的Referer,还有验证XMLHttpRequests里的自定义header。鉴于种种原因,这三种方法都不是那么完美,各有利弊。 二 CSRF的分类 在跨站请求伪

  • PHPCMS组合技进行CSRF攻击 2014-07-28

    众所周知phpcms登录后台后,有一个pc_hash作为防范CSRF的TOKEN,且看我怎么利用一个组合技来进行CSRF攻击的。 phpcms安装好后默认允许申请友情链接。而且友情链接分两种:文字链接和图片链接。 其中图片链接,管理员在审核的时候,图片会直接显示后台。而后台url中是包含这个pc_hash的,我们就能在图片的referer里找到这个pc_hash~~岂不妙哉? 利用方法如下: 首先我在本地简单写了一个获得referer的脚本: <?php $referer = isset(

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.041 (s). 10 q(s)