2017-08-09 63 views
0

我有我想這個消毒SQL查詢:如何清理查詢?

SELECT * FROM navigation_$cat ORDER BY parent ASC, prio ASC 

的問題是,我不能得到$貓越快,因爲它正在通過AJAX發送,並指出需要訪問的數據庫。我如何創建比簡單地將字符串放在一起更安全的PDO語句?

+0

'$ cat'從哪裏來? – BenM

+4

[我不相信你可以使用PDO參數化表名。](https://stackoverflow.com/q/11312737/2191572)你可以/應該爲'$ cat'建立一個可接受的值的白名單,並檢查'​​$ cat'在構建查詢字符串之前位於白名單中。 – MonkeyZeus

+1

檢查$ cat是否在期望值列表中 –

回答

2

您可以實現一個白名單,但另一種選擇將是檢查使用有效輸入:

SHOW TABLES LIKE :tblname 

'navigation_'.$cat作爲參數。檢查它是否只返回一個表,並且返回的表完全匹配傳遞的參數。

一旦完成,您就知道注入查詢是安全的,因爲您已經確定它確實是一個有效的表名。

這就是說,「從未知事件表中動態選擇」通常表明您正在設計數據庫時出錯,並且您應該只有一個navigation表,其中包含category列。

+0

感謝您的提示!我其實已經有了一張分類表,我只是覺得我可以跳過這一點。現在更改我的代碼,以便正常工作。謝謝! – smiet