2012-10-24 29 views
-2

我有一個模塊,用戶可以使用MySQL語句創建報告。他們只需要使用SELECT語句。我用strpos("", $sSelect)檢查它。有沒有解決方案,我可以如何檢查所有其他危險語句的字符串(如DROP, Replace, DELETE, TRUNCATE, ALTER,... etc.)。只有SELECT是允許的。如何檢查MySQL SELECT字符串是否存在SELECT?

格爾茨

+0

我認爲只搜索'select'的位置不是一個好主意...... – StaticVariable

+2

@JordanRichards MySQL絕對不會被棄用。 PHP mysql_ * API已被棄用,但OP沒有提及使用它。 – markus

+0

@ markus-tharkun哦,是的,對不起。我一直在犯這個錯誤。 –

回答

0

你可以使用正則表達式。

if (!preg_match('#^SELECT .*#i', ltrim($your_string))) { 
    // not allowed... 
} 

如果字符串不與SELECT語句(不區分大小寫)開始做一些事情......

然而,這並不是最好的方法,你必須考慮到限制用戶權限! 此外,通過這種方法,「壞傢伙」可以通過這種方式執行另一個命令:SELECT ...; DROP TABLE ...;

+0

那有什麼問題? – jan267

+0

問題是你正在回答錯誤的問題。這不能通過試圖解析查詢來解決,這將永遠不夠好,必須用合適的mysql用戶和權限來控制。 – markus

+0

這是肯定的...但即使這是一個錯誤的問題,我不會發現這是一個錯誤的答案:它的工作原理!也許這不是最好的方式,但它的工作原理!反正......沒問題! :) – jan267

2

您是否可以爲創建報告的人員更改MySQL用戶權限?如果是這樣,你可以限制訪問所有東西吧SELECT?您只需在創建報告時以該用戶類型進行連接,並連接到普通用戶帳戶以獲取其他信息。

+1

這絕對是一個必須加你也需要確保這個數據庫用戶只能訪問某個表! – markus

相關問題