flask——CSRFToken保护
时间:2019-10-31
本文章向大家介绍flask——CSRFToken保护,主要包括flask——CSRFToken保护使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
flask总结05(在 Flask 项目中解决 CSRF 攻击)
一:安装 flask_wtf
pip install flask_wtf
二:设置应用程序的 secret_key,用于加密生成的 csrf_token 的值
# session加密的时候已经配置过了.如果没有在配置项中设置,则如下: app.secret_key = "#此处可以写随机字符串#"
三:导入 flask_wtf.csrf 中的 CSRFProtect 类,进行初始化,并在初始化的时候关联 app
from flask.ext.wtf import CSRFProtect
CSRFProtect(app)
四:在表单中使用 CSRF 令牌:
<form method="post" action="/"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" /> </form>
五:scrf的过程理解
代码显示方法不被允许的代码
#manage.py
from flask import Flask, render_template, request, g from settings.dev import DevConfig from flask.ext.wtf import CSRFProtect app = Flask(__name__, template_folder="templates", static_folder="static") app.config.from_object(DevConfig) CSRFProtect(app) # @app.route("/csrf_test", methods=["get", "post"]) @app.route("/csrf_test") def index(): if request.method == "GET": return render_template("form.html") else: print(request.form) return "ok" if __name__ == "__main__": app.run()
templates下的form.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>csrf案例</title> </head> <body> <form action="" method="post"> 账号:<input type="text" name="username"><br><br> 密码:<input type="password" name="password"><br><br> <input type="submit" value="提交"> </form> </body> </html>
运行后显示的结果是:
然后修改manage.py中的代码,添加
@app.route("/csrf_test", methods=["get", "post"])
代码如下:
from flask import Flask, render_template, request, g from settings.dev import DevConfig from flask.ext.wtf import CSRFProtect app = Flask(__name__, template_folder="templates", static_folder="static") app.config.from_object(DevConfig) CSRFProtect(app) @app.route("/csrf_test", methods=["get", "post"]) def index(): if request.method == "GET": return render_template("form.html") else: print(request.form) return "ok" if __name__ == "__main__": app.run()
再次执行:并且提交:
说明需要在html文档中添加:csrf_token
<input type="hidden" name="csrf_token" value="{{csrf_token()}}">
修改后的代码是:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>csrf案例</title> </head> <body> <form action="" method="post"> <input type="hidden" name="csrf_token" value="{{csrf_token()}}"> 账号:<input type="text" name="username"><br><br> 密码:<input type="password" name="password"><br><br> <input type="submit" value="提交"> </form> </body> </html>
运行后的结果显示:
原文地址:https://www.cnblogs.com/leijiangtao/p/11770647.html
- 【OpenCV学习笔记之一】图像加载,修改及保存
- 【干货】一种直观的方法认识梯度下降
- 漫谈Java IO之普通IO流与BIO服务器
- 浅谈强化学习的方法及学习路线
- 【亲测有效】Win10家庭版Microsoft Edge页面出现乱码的两种解决方案及gpedit.msc命令无法使用的解决策略
- Fiddler抓包7-post请求(json)
- Selenium2+python自动化56-unittest之断言(assert)
- 长文 | 手把手教你如何使用python进行数据分析(最好将文章代码自己码一遍)
- 回归与梯度下降法及实现原理
- 【宅男宅女们的福音】电影天堂最新电影爬取及搜索脚本
- 把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案
- numpy用法小结
- 凯撒密码加解密及破解实现原理
- linux bash Shell脚本经典 Fork炸弹演示及命令详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 不会吧!都 0202 年了,不会还有不知道 axios 的吧
- 全栈的自我修养: 002使用@vue/cli进行vue环境搭建 (使用Vue,SpringBoot,Flask完成前后端分离)
- JAVA | Java 解决跨域问题 花式解决跨域问题
- 深入理解Java泛型(二)通配符与嵌套
- 用高斯计算磷光发射能
- Android So动态加载 优雅实现与原理分析
- 堆与栈区别
- 在Gaussian16中同时扫描两个反应坐标
- python调试神器traceback
- Centos安装高版本GCC
- Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
- Spring 注入集合的成员变量属性
- 深入理解JVM(③)Java的锁优化
- 解Bug之路-Nginx 502 Bad Gateway
- bootstrap v4 toast轻提示正确用法