我有一個模塊,用戶可以使用MySQL語句創建報告。他們只需要使用SELECT語句。我用strpos("", $sSelect)
檢查它。有沒有解決方案,我可以如何檢查所有其他危險語句的字符串(如DROP, Replace, DELETE, TRUNCATE, ALTER,... etc.
)。只有SELECT是允許的。如何檢查MySQL SELECT字符串是否存在SELECT?
格爾茨
我有一個模塊,用戶可以使用MySQL語句創建報告。他們只需要使用SELECT語句。我用strpos("", $sSelect)
檢查它。有沒有解決方案,我可以如何檢查所有其他危險語句的字符串(如DROP, Replace, DELETE, TRUNCATE, ALTER,... etc.
)。只有SELECT是允許的。如何檢查MySQL SELECT字符串是否存在SELECT?
格爾茨
你可以使用正則表達式。
if (!preg_match('#^SELECT .*#i', ltrim($your_string))) {
// not allowed...
}
如果字符串不與SELECT語句(不區分大小寫)開始做一些事情......
然而,這並不是最好的方法,你必須考慮到限制用戶權限! 此外,通過這種方法,「壞傢伙」可以通過這種方式執行另一個命令:SELECT ...; DROP TABLE ...;
您是否可以爲創建報告的人員更改MySQL用戶權限?如果是這樣,你可以限制訪問所有東西吧SELECT?您只需在創建報告時以該用戶類型進行連接,並連接到普通用戶帳戶以獲取其他信息。
這絕對是一個必須加你也需要確保這個數據庫用戶只能訪問某個表! – markus
我認爲只搜索'select'的位置不是一個好主意...... – StaticVariable
@JordanRichards MySQL絕對不會被棄用。 PHP mysql_ * API已被棄用,但OP沒有提及使用它。 – markus
@ markus-tharkun哦,是的,對不起。我一直在犯這個錯誤。 –