2012-10-10 51 views
1

因此,我構建了一個API,用戶可以通過只讀訪問來查詢我的數據庫。但是,我想阻止某些字段,特別是IP地址。我目前在PHP中使用preg_replace來匹配和切換IP,但我覺得有人可以通過巧妙的字符串分割MySQL函數來解決這個問題。如何在查詢時限制/混淆MySQL值

有沒有辦法阻止/替換/混淆這個只讀MySQL用戶的特定字段?

記錄將在(table.field):

他們可能會使用
`TrafficIp`.`Value` 

示例查詢是

SELECT COUNT(*) Hits, Value IpAddress 
FROM TrafficIp 
INNER JOIN Traffic 
ON Traffic.IpId = TrafficIp.Id 
GROUP BY Value 
ORDER BY Hits DESC 

我怎麼會偷樑換柱?

+0

爲什麼你不能讓你的api只服務它? – LanguagesNamedAfterCofee

+0

這就是我想弄明白的。 –

+0

啊,我沒有意識到你有一個真正的MySQL用戶。 – LanguagesNamedAfterCofee

回答

2

你可以用create a view of your table來省略IP地址的字段,並讓API用戶查詢該視圖,但不是基礎表。

真的,不是試圖在查詢的後端執行「損壞控制」,您的API應該過濾之前的查詢他們曾經將其發送到數據庫。將外部世界的原始SQL查詢傳遞到數據庫是非常不明智的。

+0

有關如何過濾這樣的查詢以確定它是否會返回「黑名單」條目的任何想法? –

+0

要做到這一點的一種方法是定義一個限制查詢語法,您在將其傳遞到數據庫之前需要仔細驗證。但是,如果您認爲IP地址是祕密的,那麼即使這樣也很危險:如果您提供對IP地址字段的訪問權限並允許外部用戶對其進行查詢(但不會返回select中的實際IP地址值),攻擊者仍可以獲取IP地址從您的數據庫查詢結果中使用幾十個查詢。 「什麼都是從1開始的?」不。「是否以2開頭?」是。有沒有20開頭的事情?「不,」21開頭是否有任何事情?「是的,等等。 –