flask的csrf防护

原创 2018年04月17日 21:38:24

一.黑客的csrf攻击方式: 

  黑客构造网站后台某个功能接口的请求地址,诱导用户去点击或者用特殊方法让该请求地址自动加载。

如果近期用户登录过被攻击网站(假设未开启防护),cookie还没过期.    那么这个黑客的请求将会哈法通过.---------本质是黑客利用用户的cookie数据.


二.防护方式与原理

   防护方式----------设置token >>>>cookie 一个token,body 里表单一个token, 两个token对上了才能通过验证.

为什么cookie和body分别加一个token,就能起到防护呢?黑客拿到token写进表单里不就可以了吗?

   防护原理-----原因是浏览器的同源策略.

>>>>浏览器执行一个脚本的时候会检查这个脚本是属于哪个页面的,检查是否同源,不同源则拒绝执行.这样cookie中的token就是安全的.

黑客拿不到cookie中的token,就无法在body中伪造token了.


三.flask中的csrf防护

依赖于flask-wtf

防护 post  put  delete  patch   |   不防护 GET


后端:

创建app函数中  CSRFProtect(app) 开启防护.

提供静态资源视图函数中 

随机token值  csrf_token = csrf.generate_csrf()

设置到cookie  response.set_cookie("csrf_token",csrf_token)


前端:

获取cookie中的token>>>>> js函数>>>>>

function getCookie(name) {
    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return r ? r[1] : undefined;
}


post的请求体数据如果是表单格式的,后端的csrf机制能直接从请求题中取csrf_token的值.


>>>>如果post的数据不是表单格式,后端无法自动的从请求体中获取csrf_token的值,前端可以在请求头中添加字段 X-CSRFToken>>>

例 :

//向后端发送注册请求
        var reqDate = {
            mobile:mobile,
            sms_code:phoneCode,
            password:passwd,
            password2:passwd2
        };
        // $.post("",reqData)  表单格式数据
        // "mobile=13750000000=xxxx=xxx..."
        var reqJsonStr = JSON.stringify(reqDate);
        $.ajax({
            url:"/api/v1.0/users",  //后端的接口网址
            type:"post",  //请求方式
            data:reqJsonStr, //请求体数据
            contentType:"application/json", //说明请求体的数据格式是json
            dataType:"json", //指明后端返回的数据格式
            headers:{  // 自定义请求头
              "X-CSRFToken": getCookie("csrf_token") //配合后端的csrf防护机制
            },
            success:function (resp) {  //成功的回调函数
                if (resp.errno == "0"){
                    //表示注册成功
                    //跳转到主页
                    location.href = "/index.html";
                } else {
                    alert(resp.errmsg);
                }
            }
        })








驱动器组合框

  相信用过VB的人都对那些驱动器,目录,文件列表控件有兴趣,VC中没有,只好自己做了。以下是我自己写的驱动器组合框控件代码。/////////// DriveBox.hclass CDriveBox...
  • ozx
  • ozx
  • 2001-04-28 01:12:00
  • 681

flask csrf保护的使用技巧

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站...
  • baidu_35085676
  • baidu_35085676
  • 2017-10-16 21:56:21
  • 1279

Flask框架在Ajax请求中开启CSRF保护

前面Flask学习总结笔记(5)– Form表单中对表单提交中开启CSRF保护进行了详细讲解。虽然Ajax不同于表单提交,但是我们同样可以手动利用相同的办法,开启CSRF保护。...
  • kikaylee
  • kikaylee
  • 2017-03-19 02:08:16
  • 1214

跨站请求伪造-CSRF防护方法

  • 2013年03月12日 10:57
  • 46KB
  • 下载

flask表单提交的时候报错CSRF token missing or incorrect

@csrf.exempt @app.route('/foo', methods=('GET', 'POST')) def my_handler(): # ... return 'ok'...
  • u013781965
  • u013781965
  • 2017-05-27 15:26:44
  • 805

Flask教程笔记-CSRF token保护验证

Flask教程笔记-CSRF token保护验证#! coding=utf8 from flask import Flask, render_template from flask_sqlalchem...
  • pyphrb
  • pyphrb
  • 2016-07-21 13:40:49
  • 3586

关于WAF防护CSRF的token机制问题理解

参考:http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html --------------------日记 昨天的token机制是...
  • xing_anksh
  • xing_anksh
  • 2013-08-29 14:17:57
  • 1296

CSRF攻击与防御(写得非常好)

转载地址:http://www.phpddt.com/reprint/csrf.html        CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery...
  • stpeace
  • stpeace
  • 2016-12-08 00:33:33
  • 54955

HTTP路由实例教程(三)—— CSRF攻击原理及其防护

1、什么是CSRF攻击 CSRF是跨站请求伪造(Cross-site request forgery)的英文缩写。关于CSRF攻击原理及其防护,可查看Github上的这个项目:理解CSRF,说得...
  • yishouwangnian
  • yishouwangnian
  • 2016-09-27 15:21:39
  • 235

web安全————CSRF(防御篇)

CSRF防御之验证码      目前,验证码被认为是对抗CSRF攻击最简单有效的防御措施。用到验证码就是在请求过程中强制用户与应用进行交互,但是一个站点、一个好的产品要考虑到用户的体验,显然如果在所有...
  • longgerlee
  • longgerlee
  • 2016-12-08 10:18:04
  • 334
收藏助手
不良信息举报
您举报文章:flask的csrf防护
举报原因:
原因补充:

(最多只允许输入30个字)