sqlalchemy防sql注入


銀行對安全性要求高,其中包括基本的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM