以前一直都是直接把id作為get參數在前端各種傳,比如
a.com?uid=16這樣的地址,如果使用者發現了這個規律,只要把16改成17、18、19等等,就可以查看各個使用者的資料了,所以想問問你們是怎麼解決的?
需求不是說不允許使用者查看其它使用者的資料,而是誰都可以看。那為什麼還有這種需求呢?這就好像是的號一樣,只要有了號就能搜到那個人,沒有號,也很難通過撞庫、運氣等找到那個人。優酷、馬鈴薯、B站,所有視頻網站都沒有直接把視頻的id顯示到地址欄上的,都是經過加密的。(如果視頻網站在資料庫是不用連續id的,那當我沒說過...事實上我也的確沒看過上述網站的資料庫)
要求是,加解密速度快,破解難。(前者優先)
回複內容:
以前一直都是直接把id作為get參數在前端各種傳,比如a.com?uid=16這樣的地址,如果使用者發現了這個規律,只要把16改成17、18、19等等,就可以查看各個使用者的資料了,所以想問問你們是怎麼解決的?
需求不是說不允許使用者查看其它使用者的資料,而是誰都可以看。那為什麼還有這種需求呢?這就好像是的號一樣,只要有了號就能搜到那個人,沒有號,也很難通過撞庫、運氣等找到那個人。優酷、馬鈴薯、B站,所有視頻網站都沒有直接把視頻的id顯示到地址欄上的,都是經過加密的。(如果視頻網站在資料庫是不用連續id的,那當我沒說過...事實上我也的確沒看過上述網站的資料庫)
要求是,加解密速度快,破解難。(前者優先)
是這樣的,如果你的目的是防止使用者查看別的使用者的資料,那麼你的思路是有點偏差的。
你應該要做的是在後端做鑒權而不是去加密 uid。舉個例子,比如說現在已登入的使用者是 uid=16,那麼當他請求 a.com?uid=17(或者其他非 16 的頁面),後端應該能判斷出他沒有許可權並給出相應的返回(如輸出空白頁面,或者是直接拋 403 之類)。
至於說怎麼去實現鑒權,簡單的就是把已登入使用者的 uid 記錄在 $_SESSION['uid'] 裡,每次請求的時候判斷 $_GET['uid'] == $_SESSION['uid'] 是否為真。
2016-10-26 21:51 補充: <<<
題主更新了題目說需求是誰都可以看到使用者資料,只是想把使用者的 uid 隱藏起來。遇到這種情況,我的做法是在使用者表增加一個欄位 openid 並將其加入索引,在使用者註冊時可以通過 uid、UNIX 時間戳記、若干長度的隨機字串 等組合後通過 md5() 一類的函數來產生一個唯一的 openid,對外公開資料的情況下就通過 openid 來檢索資料。
<<
如果你堅持要用加密的方式,可以自己到網上搜一下,已經有很多現成的成熟的解決方案了,我用 PHP加解密 為關鍵詞在 Google 搜尋,第一頁幾乎全都是你想要的東西,例如下面這段代碼摘自搜尋結果中的第一條,你可以參考(我未做測試)。
出處:http://jerry17768java.blogspo...
hash some+random some
我覺得你應該加入的是許可權判斷的功能,比如根據cookie識別使用者.
加/解密可以用OpenSSL AES: