Python 防止sql注入的方法

你说夕阳很美發表於2024-10-29

SQL 使用引數化查詢如何防止SQL隱碼攻擊|極客教程

(4 封私信 / 80 條訊息) 為什麼引數化SQL查詢可以防止SQL隱碼攻擊? - 知乎

關鍵字:引數化查詢

程式碼片段

    def execute(self, query, vars=None): # real signature unknown; restored from __doc__
        """ execute(query, vars=None) -- Execute query with bound vars. """
        pass

# 1
select_sql = f"select * from tb_admin where role = '{role_id}';"
cursor.execute(select_sql)

# 2
select_sql = f"select * from tb_admin where role = %s;"
cursor.execute(select_sql, (role_id, ))

程式碼1 存在sql注入風險

程式碼2 不存在風險

===========

分析(根據上述文章連結做的小結,會有資訊丟失,僅供參考):

輸入引數 1' or '1'='1

程式碼2使用了引數化查詢,會預編譯,把輸入引數包裹成一個字串;程式碼1不會

用sql解釋

程式碼1:select * from tb_admin where role = '1' or '1'='1'; 所以會有風險

程式碼2:select * from tb_admin where role = "1' or '1'='1'';

相關文章