2012-04-15 95 views
0

我有一個信息樹,它發送給JSON對象中的客戶端。在那個對象中,我不想擁有來自數據庫的原始ID。我想在對象(例如標題)或鹽中創建id和字段的散列,但我擔心這可能會對處理開銷產生嚴重影響。保護用於客戶端處理的數據庫密鑰

SELECT * FROM `things` where md5(concat(id,'some salt')) = md5('1some salt'); 

在這種情況下,是否有標準的做法來遮蔽ID?

+0

因此,您不相信您正在使用數據庫中的數據編寫的腳本? – ChrisK 2012-04-15 17:16:29

+0

如果您不相信網絡和數據庫服務器之間的橋樑,那麼使用建議的方法將通過網橋發送鹽以確認信息 - 通過網橋發送鹽,您可以使用純文本通過ID進行搜索。 – ChrisK 2012-04-15 17:19:22

+0

可能的重複[如何設計順序散列函數](http://stackoverflow.com/questions/9804100/how-to-design-a-sequential-hash-like-function) – Quentin 2012-04-15 17:29:21

回答

1

我能想到的兩個選項給你:

1)您預哈希每個ID,並將其與數據庫中的原始ID存儲。這可能是也可能不是一個好主意,具體取決於你的數據庫大小和大小的限制。

2)自己寫一個簡單的散列函數!如果你沒有想法,我可以建議你一些簡單的事情。只是因爲它很簡單並不意味着它不好,只要你知道它是如何工作的!我假設該函數沒有在客戶端進行哈希處理。就個人而言,我更喜歡在服務器端代碼端而不是數據庫端處理函數(如散列函數),因爲我希望儘可能使MySQL儘可能免費,以儘可能少的延遲返回數據。

0

您可以創建一個值爲md5(concat(id,'some salt'))的新列,並在使用select語句保存調用開銷之前計算它。

1

一個選項可能是使用php會話數據來存儲發送給客戶端的id#的列表,並使用hash#s來存儲。

這將意味着每次都會發送唯一的哈希值,下次加載時無法追蹤。

但是您可以設置哈希ID,但您認爲(在這種情況下,md5會使用salt,但任何簡單操作都可以),並將它們存儲在會話中的數組中。

儘量避免在數據庫中這樣做,如果可能的話。