一種可以很好地防止猜測ID號的方法是向ID添加某種填充,然後將其轉換爲base32。當然,這並不能消除完全猜測身份的能力,但對於任何正在窺探的人來說,這確實會讓它更費時。
如果有網址www.domain.com/index.php?id_page=1,您可以將ID轉換的東西在你的應用程序唯一的,例如:
填充ID = ID×9 - 2
7 = 1 x 9 - 2
16 = 2 x 9 -2
25 = 3 x 9 - 2
然後,你可以轉換新的填充ID到基座32,這將是
7 = G4
16 = GE3A
25 = GI2Q
新的URL將被(爲1一個id ):
www.domain.com/index.php?id_page = G4
使用這種方法,如果有人猜測1-6的基數32,它將返回404,因爲你的ID爲1實際上被填充爲7,猜測8-15不會返回一個解析的ID,因爲2的下一個ID填充爲16,依此類推。
這不僅使查詢字符串的大小更小,而且它也不使用明顯的MD5哈希,它可以非常容易地按字典順序瀏覽。
如果您希望將頁面鏈接到特定的用戶,那麼沒有理由不能將更多值添加到新的padded_id(我們稱之爲散列)。
例如,如果您有一個ID爲12的用戶,並且您只希望該用戶能夠訪問ID爲10的頁面,則需要創建一個包含這兩個值的散列:
PAGE_ID(10)-user_id(12),使用上述示例中,這將產生:
(10 x 9 - 2) (12 x 9 - 2)
88-106
HA4A-GEYDM
現在具有可以固定到一個單一的用戶ID的漂亮的小散列鏈接。上述示例中的填充方法相當簡單,但它提供瞭如何解決問題的總體思路。
來源
2015-04-07 08:12:16
Amo
他們在查看該頁面時是否已登錄? – ambe5960
你特別擔心什麼樣的利用/規避? – Harvtronix
@ ambe5960是的,登錄過程發生在它們被重定向到相應的頁面之前。該過程類似於:登錄 - >驗證鏈接是否包含id_page - >如果它確實將用戶重定向到相應的頁面 –