zoukankan      html  css  js  c++  java
  • 在 Flask 项目中解决 CSRF 攻击

    在 Flask 项目中解决 CSRF 攻击

    pip install flask_wtf
    

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

    1. 设置应用程序的 secret_key,用于加密生成的 csrf_token 的值
    # 1. session加密的时候已经配置过了.如果没有在配置项中设置,则如下:
    app.secret_key = "#此处可以写随机字符串#"
    
    # 2. 也可以写在配置类中。
    class Config(object):
        DEBUG = True
        SECRET_KEY = "dsad32DASSLD*13%^32"
        
    """加载配置"""
    app.config.from_object(Config)
    
    1. 导入 flask_wtf.csrf 中的 CSRFProtect 类,进行初始化,并在初始化的时候关联 app
    from flask.ext.wtf import CSRFProtect
    CSRFProtect(app)
    
    1. 在表单中使用 CSRF 令牌:
    <form method="post" action="/">
        <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    </form>
    

    视图代码;

    from flask import Flask,render_template
    from settings.dev import Config
    from flask_script import Manager
    from flask_wtf.csrf import CSRFProtect
    # from flask.ext.wtf import CSRFProtect  # 低版本的flask直接可以引入
    """创建flask应用"""
    app = Flask(__name__,template_folder='templates')
    """使用脚手架[终端脚本]启动项目"""
    manage = Manager(app)
    """加载配置"""
    app.config.from_object(Config)
    
    """初始化csrf防范机制"""
    CSRFProtect(app)
    
    @app.route("/login",methods=["get"])
    def loginform():
        return render_template("login.html")
    
    
    @app.route("/dologin",methods=["post"])
    def login():
        return "ok"
    
    if __name__ == '__main__':
        manage.run()
    

    模板代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="{{ url_for('login') }}" method="post">
            <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
            <input type="submit" value="登录">
        </form>
    </body>
    </html>
    
  • 相关阅读:
    (转)jQuery.extend 函数详解
    (转)跟我一起学JQuery插件开发教程
    (转)jQuery插件开发全解析
    (转)弹出窗口lhgDialog API文档
    (转)反射发送实战(-)InvokeMember
    (转)JQuery处理json与ajax返回JSON实例
    linux下添加用户并赋予root权限
    Linux 下配置,安装Hadoop
    Linux 下安装 jdk-7u79-linux-x64.gz,jdk1.7.0_79,jdk1.7步骤:
    linux下导入、导出mysql数据库命令
  • 原文地址:https://www.cnblogs.com/hsqKTm/p/14805520.html
Copyright © 2011-2022 走看看