以前一直都是直接把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 搜索,第一頁幾乎全都是你想要的東西,例如下面這段程式碼摘自搜尋結果中的第一條,你可以參考(我未做測試)。
<?php // 設定金鑰, 負責對資料進行加解密 $key = "ac181c517bdf24ce053556bb280a2dcb"; /** * 加密函數 */ function encrypt($str) { $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); return base64_encode(trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, self::$key, $str, MCRYPT_MODE_ECB, $iv))); } /** * 解密函數 */ function decrypt($str) { $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, self::$key, base64_decode($str), MCRYPT_MODE_ECB, $iv)); } ?>
出處:http://jerry17768java.blogspo...
hash some+random some
我覺得你應該加入的是權限判斷的功能,比如根據cookie識別用戶.
加/解密可以用OpenSSL AES:
<code><?php header('Content-Type: text/plain;charset=utf-8'); $data = 'phpbest'; $key = 'oScGU3fj8m/tDCyvsbEhwI91M1FcwvQqWuFpPoDHlFk='; //echo base64_encode(openssl_random_pseudo_bytes(32)); $iv = 'w2wJCnctEG09danPPI7SxQ=='; //echo base64_encode(openssl_random_pseudo_bytes(16)); echo '内容: '.$data."\n"; $encrypted = openssl_encrypt($data, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv)); echo '加密: '.base64_encode($encrypted)."\n"; $encrypted = base64_decode('To3QFfvGJNm84KbKG1PLzA=='); $decrypted = openssl_decrypt($encrypted, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv)); echo '解密: '.$decrypted."\n";</code></code>

負載均衡會影響會話管理,但可以通過會話複製、會話粘性和集中式會話存儲解決。 1.會話複製在服務器間複製會話數據。 2.會話粘性將用戶請求定向到同一服務器。 3.集中式會話存儲使用獨立服務器如Redis存儲會話數據,確保數據共享。

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

PHP會話的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。 1.Cookies通過在客戶端存儲數據來管理會話,簡單但安全性低。 2.Token-basedAuthentication使用令牌驗證用戶,安全性高但需額外邏輯。 3.Database-basedSessions將數據存儲在數據庫中,擴展性好但可能影響性能。 4.Redis/Memcached使用分佈式緩存提高性能和擴展性,但需額外配

Sessionhijacking是指攻擊者通過獲取用戶的sessionID來冒充用戶。防範方法包括:1)使用HTTPS加密通信;2)驗證sessionID的來源;3)使用安全的sessionID生成算法;4)定期更新sessionID。

本文比較了PHP和ASP.NET,重點是它們對大規模Web應用程序,性能差異和安全功能的適用性。兩者對於大型項目都是可行的,但是PHP是開源和無關的,而ASP.NET,


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具