2011-04-21 57 views
2

有沒有什麼辦法可以阻止用戶對我的數據庫執行UNION操作?停止用戶對數據庫執行UNION操作

+5

不要讓用戶向數據庫提交任意的SQL語句。 – 2011-04-21 15:48:20

+0

使用準備好的語句並閱讀sql注入... – knittl 2011-04-21 15:50:08

+0

@clintp:現在我該怎麼做? 例如:我爲用戶提供了一個文本框,以便將他的查詢放入我的系統中執行。 – 2011-04-21 15:50:38

回答

5

你可以運行它之前建立用於查詢的EXPLAIN並拒絕查詢,如果存在的UNIONselect_type一提。

雖然這不會允許您運行任何DML查詢,因爲EXPLAIN不適用於它們。

不是我不明白爲什麼在地球上你需要這樣做。

+0

+1比我的回答好得多。 – awm 2011-04-21 16:10:24

+0

必須看看,但似乎可以做些事情:) – 2011-04-21 17:08:21

3

不,我會推薦這個,但是......

if (stripos($_POST['query'],'union') !== false) die("No dice, bro.") 

這顯然沒有讓用戶把單詞「聯合」,在任何數據庫字段不做某事的不良副作用傻得像concat('un','ion')

+1

我不是一個PHP的傢伙,但要確保你抓住大寫和小寫字符串。 – Remy 2011-04-21 15:54:14

+0

如果單詞「union」是一個表名,那麼該怎麼辦? – 2011-04-21 15:55:56

+0

@Remy是的,'stripos' [不區分大小寫](http://www.php.net/manual/en/function.stripos.php)。 – awm 2011-04-21 15:56:01

0

我基本上會支持reggie。另外,您只能掃描單詞UNION的輸入字符串。請注意,這在任何情況下都存在安全風險。