安全處理IN 查詢:了解WHERE IN 語句
使用資料庫查詢時,根據一組值檢索特定記錄是常見要求。 WHERE IN 語句提供了一個有效的方法來實現此目的。
資料庫架構與意圖
考慮以下資料庫table:
CREATE TABLE IF NOT EXISTS tab (_id integer PRIMARY KEY AUTOINCREMENT, obj text NOT NULL);
您打算擷取obj 所在的記錄列值與變數清單匹配,如果處理不當,可能容易受到SQL 注入的攻擊。
第一種方法:手動方法
嘗試使用手動建構查詢list_of_vars 和 join()產生佔位符字串可能會因數量不符而引發錯誤
statement = "SELECT * FROM tab WHERE obj IN (?);" c.execute(statement, "'"+"','".join(list_of_vars)+"'")
推薦方法:參數化查詢
要安全地執行IN 查詢,請使用參數佔位符(?) 並將變數清單綁定為參數。使用 format 方法建立語句以產生適當數量的佔位符:
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
透過傳遞 list_of_vars 作為參數值列表,可以確保正確的綁定並防止 SQL 注入漏洞。
以上是如何安全使用WHERE IN語句防止SQL注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!