Flask 防止 injection

在写好flask 服务之後,可能会将服务给弱点分析软件进行扫描,
之後会显示出一些高风险的漏洞,

而在开始寻找如何修补这些资安风险的同时,我发现程序方面的说明文章不是很多。

後来寻找到不错的说明影片以及他们的投影片:

https://www.pykonik.org/media/slides/tech-talks-52-good-to-the-last-drop-writing-robust-flask-and-django-apps.pdf

首先想到解决方法是,要写入攻击就会在form里面写入代码,
像是在sql语法中就会写入 ';'这样的字串,
而针对mongodb的攻击可能会含有'$'的字串。

因此我希望拿到的字串资讯都先替代调这些字串:

def check_inject_value(pass_value):
    pass_value.replace("'", "")
    pass_value.replace('"', "")
    pass_value.replace('$', "")
    pass_value.replace(';', "")
    pass_value.replace('/', "")

    return pass_value

但是弱点扫描程序还是持续有高风险状态漏洞,
因此在投影片中建议采取的对策是使用db orm 套件,
像是Flask-SQLAlchemy或是flask_pymongo。

一般写法可以看官网的介绍:
https://flask-sqlalchemy.palletsprojects.com/en/2.x/

https://flask-pymongo.readthedocs.io/en/latest/

这里使用flask_pymongo在blue_print中的使用方法:

from flask import Flask, request, Blueprint,jsonify,current_app
from flask_pymongo import PyMongo

hello_blueprint = Blueprint('hello_blueprint', __name__)


@hello_blueprint.route('/hello', methods=["POST"])
def Auther_Letter_first():

with current_app.app_context():
    current_app.config["MONGO_URI"] = f"mongodb://localhost:30300/hello"
    orm_mongo = PyMongo(current_app)

    hellodoc = orm_mongo.db.hellohello.find_one()
    
    return jsonify({"result": 1,"content": hellodoc })
    

从hello这个DB中的hellohello这个collection,寻找第一笔资料。

而在采用了orm套件之後,风险漏洞也消失了,
虽然我不知道弱点扫描的逻辑是甚麽,
明明在不同分支写的语法都一样,
有的地方就有风险,有的地方没有,
但是多一层处理能使服务更安全。


<<:  python3的环境安装

>>:  Python 做自动化编译 相关指令汇整

标签图片的方法与实作 - Day 12

标签图片的方法与实作 - Day 12 资料增量 (Data Augmentation) 的部份因为...

MLOps在金融产业:模型的可解释性与公平性

有一些模型像是逻辑回归和决策树,背後运作的原因相当简单明了,容易解释模型是如何得出其输出的。但随着更...

Day 10 | 嵌套元件(一)

嵌套元件(Nesting Components),在 Vue.js 中是很普遍的用法,可以在父元件赋...

【Day08】for 回圈在硬体的使用及该注意的那些事

for-loop 在 C/C++ 语言中,我们经常用到 for 回圈语句,但在 Verilog 中 ...