銀行對安全性要求高,其中包括基本的mysql防注入,因此,記錄下相關使用方法:
注意:sqlalchemy自帶sql防注入,但是在 execute執行 手寫sql時 需要考慮此安全問題
對於 where in 的防sql注入:(in 的內容一定要是tuple類型,否則查詢結果不對)
in_str = tuple(input_list)
sql = "(SELECT count(id) FROM {0} WHERE {0}.id IN :in_str);".format(cls.__tablename__) cursor = db.get_engine(current_app, cls.__bind_key__) return cursor.execute(text(sql), in_str=in_str).fetchone()[0]
對於 where 一般的防sql注入:
sql = """ (select {index}.sec_id, from {index}, {main} where {index}.sec_id= {main}.sec_id and {main}.user_id=:user_id); """.format(index=TableA.__tablename__, main=TableB.__tablename__) cursor = db.get_engine(current_app, TableB.__bind_key__) return cursor.execute(text(sql), user_id=user_id).fetchall()
防sql注入 只能對 where里面 等於 號 后面的進行防注入,其他部分的 字符串 仍然需要拼接
其余關鍵字中的使用方法 參考如下 官網教程
官網教程:https://docs.sqlalchemy.org/en/latest/core/tutorial.html#using-textual-sql
