2010-09-18 32 views
-2

我怎樣將禁用MySQL基準的功能,因此不經受盲SQL注入攻擊,例如「選擇如果(用戶()像 '根@%',基準(100000,SHA1( '測試' )),'假');「MYSQL禁用SELECT BENCHMARK

select * from func沒有顯示功能基準。

親切的問候 查爾斯

+5

我寧願不允許人們在我的服務器上執行任何SQL,而不是禁用一些希望別人找不到方法的位。曾聽說過參數化查詢嗎? – 2010-09-18 19:45:06

+2

如果你的應用程序正確地轉義數據,你不必擔心這一點。如果你找到一種方法來禁用'基準測試',那麼將有足夠的其他方法來確定查詢是成功還是失敗。 – Lekensteyn 2010-09-18 19:46:41

+0

雖然其他人認爲你的問題不相關或無用,但我確實發現它很有價值。看來基準測試可以用來收集有關服務器的信息,這將有助於攻擊者把它關閉(http://pastebin.com/88Lzs1XR) – Purefan 2011-10-28 16:02:54

回答

1

最佳實踐的建議是escape data before passing to the query或創建準備語句。不幸的是,不僅基準功能是危險的,所以你需要禁用其他...

+0

嗨,夥計們,我知道可能有其他方式,但我明確地希望知道如何禁用基準。謝謝,查爾斯 – Charles 2010-09-18 20:00:57

+1

@Charles:但是爲什麼?如果你正確地使用參數化查詢,那麼加入這種額外的保護措施就像在混凝土地堡周圍放置柵欄(以防萬一有人通過混凝土掩體進行操作,但是病態地害怕柵欄) – 2010-09-18 20:03:51

+0

@Matti因爲我需要做一個研討會,參數化的查詢可能是答案:)我也關心這一點。當然,備份選項總是可以看到源代碼,但我希望有一些簡單的DISABLE BENCHMARK選項。 – Charles 2010-09-18 20:19:53

1

我發現這個答案!

 
.... 
echo preg_match("/^([\'\)\"a-zA-Z0-9])+([0-255[:ascii:]])+select+([0-255[:ascii:]])+([\-])+([0-255[:ascii:]])+$/","8' union select 1 from --"); 
echo preg_match("/^([\'\)\"\(a-zA-Z0-9])+([0-255[:ascii:]])+benchmark+([0-255[:ascii:]])+([\-])+([0-255[:ascii:]])+$/","select if(user() like '[email protected]%', benchmark(100000,sha1('test')), 'false')--"); 
.... 
0

@Charles我同意在沒有首先解決根本原因(輸入驗證等)的情況下消除BENCHMARK功能就是將馬放在購物車之前。但我不同意這是一個柵欄或完全無用的。

假設(一)這是比較容易禁用,和(b)禁用它不會造成新的漏洞,爲什麼不去做呢?對我來說,這不是防禦的第二步,而是保護系統的第一步:禁用任何和所有未使用的服務功能。否則,你只需要一個攻擊者的工具箱就可以使用另一個潛在的工具 - 更不用說一個工具了,這個工具已經被很好的記錄並且內置在每個按鈕BlackBox中!

我想我有你的說法的最大的問題,從是否要啓用或禁用BENCHMARK辯論莖沒有,但你的假設,參數化查詢是萬無一失的。把太多的信心放在一個系統中,並且有一種虛假的安全感比不禁用像BENCHMARK這樣的功能要危險得多。誰是說Oracle /微軟/等等。不要在將來的版本中引入錯誤?誰在說現在沒有一個錯誤在等待被發現?誰能說你可以相信每一個從事代碼工作的人?