iT邦幫忙

0

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套件之後,風險漏洞也消失了,
雖然我不知道弱點掃描的邏輯是甚麼,
明明在不同分支寫的語法都一樣,
有的地方就有風險,有的地方沒有,
但是多一層處理能使服務更安全。


尚未有邦友留言

立即登入留言