在寫好flask 服務之後,可能會將服務給弱點分析軟體進行掃描,
之後會顯示出一些高風險的漏洞,
而在開始尋找如何修補這些資安風險的同時,我發現程式方面的說明文章不是很多。
後來尋找到不錯的說明影片以及他們的投影片:
首先想到解決方法是,要寫入攻擊就會在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套件之後,風險漏洞也消失了,
雖然我不知道弱點掃描的邏輯是甚麼,
明明在不同分支寫的語法都一樣,
有的地方就有風險,有的地方沒有,
但是多一層處理能使服務更安全。