我有我想這個消毒SQL查詢:如何清理查詢?
SELECT * FROM navigation_$cat ORDER BY parent ASC, prio ASC
的問題是,我不能得到$貓越快,因爲它正在通過AJAX發送,並指出需要訪問的數據庫。我如何創建比簡單地將字符串放在一起更安全的PDO語句?
我有我想這個消毒SQL查詢:如何清理查詢?
SELECT * FROM navigation_$cat ORDER BY parent ASC, prio ASC
的問題是,我不能得到$貓越快,因爲它正在通過AJAX發送,並指出需要訪問的數據庫。我如何創建比簡單地將字符串放在一起更安全的PDO語句?
您可以實現一個白名單,但另一種選擇將是檢查使用有效輸入:
SHOW TABLES LIKE :tblname
和'navigation_'.$cat
作爲參數。檢查它是否只返回一個表,並且返回的表完全匹配傳遞的參數。
一旦完成,您就知道注入查詢是安全的,因爲您已經確定它確實是一個有效的表名。
這就是說,「從未知事件表中動態選擇」通常表明您正在設計數據庫時出錯,並且您應該只有一個navigation
表,其中包含category
列。
感謝您的提示!我其實已經有了一張分類表,我只是覺得我可以跳過這一點。現在更改我的代碼,以便正常工作。謝謝! – smiet
'$ cat'從哪裏來? – BenM
[我不相信你可以使用PDO參數化表名。](https://stackoverflow.com/q/11312737/2191572)你可以/應該爲'$ cat'建立一個可接受的值的白名單,並檢查'$ cat'在構建查詢字符串之前位於白名單中。 – MonkeyZeus
檢查$ cat是否在期望值列表中 –