我用PHP做的頁面,如果點擊某使用者查看該使用者資訊時,在URL欄上出現:http://www.abc.com/index.php?user_id=39,修改數字就可以查看另外的使用者。這樣太不安全了吧?
用什麼方法可以避免此問題,讓URL上只出現"http://www.abc.com/"或"http://www.abc.com/index.php"這樣的資訊?
請教具體做法!
回複討論(解決方案)
修改數字就可以查看另外的使用者。這樣太不安全了吧?
這個安全問題不需要隱藏URL參數來解決,用$_SESSION來判斷目前使用者是否是參數user_id的值,如果是,可以查看,否則不能查看。而且查看別的使用者的資訊應該是被允許的,你可以在視圖裡過濾掉一些隱私的資訊
可通過 cookie 或 session 傳遞
可以寫一下 詳細代碼嗎,急求 ,謝謝
修改數字就可以查看另外的使用者。這樣太不安全了吧?
這個安全問題不需要隱藏URL參數來解決,用$_SESSION來判斷目前使用者是否是參數user_id的值,如果是,可以查看,否則不能查看。而且查看別的使用者的資訊應該是被允許的,你可以在視圖裡過濾掉一些隱私的資訊
具體怎麼寫可以 附上代碼嗎 實在是不懂
這是許可權控制問題
比如 http://my.csdn.net/xuzuning 和 http://my.csdn.net/ 呈現出來的就不一樣
最簡單的就是用session進行比對
至於代碼 自己寫 有bug或者不能跑再問
//首先,你得在使用者登入後把uid存到session裡,比如在login.php中$_SESSION['uid'] = XXX //XXX為使用者登入時給他的sessionID(和user表的uid值相同)//比如在userinfo.php中if($_SESSION['uid'] == intval($_GET['user_id'])){//顯示當前登入使用者資訊}else{//可以顯示別的使用者的資訊(用$_SESSION['uid']查詢user表的uid,並根據需要展示資訊)//也可以直接給出error資訊,告訴他不能查看該使用者的資訊}
//首先,你得在使用者登入後把uid存到session裡,比如在login.php中$_SESSION['uid'] = XXX //XXX為使用者登入時給他的sessionID(和user表的uid值相同)//比如在userinfo.php中if($_SESSION['uid'] == intval($_GET['user_id'])){//顯示當前登入使用者資訊}else{//可以顯示別的使用者的資訊(用$_SESSION['uid']查詢user表的uid,並根據需要展示資訊)//也可以直接給出error資訊,告訴他不能查看該使用者的資訊}
不好意思 還是不太懂,$_SESSION['uid'] = XXX 是放在那個登陸時的html頁面 還是放在 php 頁面 ,if($_SESSION['uid'] == intval($_GET['user_id'])){ 具體是放在哪兒呢,放在登陸後的html頁面上呢,還是放在登陸後做判斷的 php頁面呢
$_SESSION['uid'] = XXX放在php指令碼裡,在該指令碼中:在完成了登入資訊檢查之後,設定$_SESSION['uid'] =XXX,該XXX應該是根據使用者登入的表單欄位從user表取出的uid。
if($_SESSION['uid'] == intval($_GET['user_id']))應該放在登陸後做判斷的 php指令碼裡,如果GET傳來的user_id和$_SESSION['uid']一致,則從使用者資訊表取出使用者資訊賦值給$userinfo,再引入html頁面,在html頁面裡嵌入php代碼,比如使用者名稱:
如果傳來的參數和$_SESSION['uid']不相同,則表示要查看的使用者資訊不是當前登入的使用者,這時,如果你想顯示出該使用者的資訊,仍然是從根據GET的user_id從使用者資訊表查資訊,你可以選擇性地展示一些使用者資訊,不展示一些隱私的資訊;如果你不想顯示當前登入使用者之外的其他使用者的資訊,直接header(location:XXXXX);跳轉到錯誤頁面,提示不能查看他的資訊