Re: [請益] 用php控制操作者權限

看板PHP作者 (寶貝豬)時間15年前 (2009/04/27 10:50), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串4/4 (看更多)
權限(authorization)檢查 通常不離 身份認證(authentication), 可以做到 極細密, 相對資料規劃的架構也相當複雜; 也可以做得相當簡單, 只要用 檔案存幾行資料就行了. 就這個例子, 較簡單的方法就是針對不同的用戶群組設不同的menu樣板, 不同的menu樣板中記錄著各自所應許給用戶的功能權限, 預先存成檔案儲存 起來. 在用戶進行完身份認證確認其所屬群組後, 接著根據他的所屬群組推 出相對應的menu樣板就行了. menu樣板設計如下: [public_menu.txt] register,我要註冊 news_list,新聞快報 story_list,事件報導 ... [admin_menu.txt] user_add,用戶新增 user_list,用戶列表 user_delete,用戶刪除 user_edit,用戶編修 ... [user_class_1_menu.txt] ... [user_class_2_menu.txt] ... 若是要擋非法執行的, 也是同樣的方法, 但可分兩種情況: case 1. 未經身份認證, 非法執行: 在session檢查不到用戶的登入資料時即可擋掉. case 2. 已經身份認證, 非法執行(例如會員想偷用admin權限才能執行的功能): 只要在該用戶所屬的menu樣板中沒有該功能的記錄, 即判定為非法執行. 另外還有合法執行的情形: case 3. 未經身份認證, 合法執行: 有些功能無需身份認證亦可執行, 例如 "我要註冊". case 4. 已經身份認證, 合法執行: 這是預期的合理情況, 就不除弊了. 用圖示的方法則為: case 3. | case 4. 合法執行(權限滿足) | 合法執行(權限滿足) 未經身份認證 | 已經身份認證 ----------------------------+------------------------ case 1. | case 2. 非法執行(權限不足) | 非法執行(權限不足) 未經身份認證 | 已經身份認證 系統在處理用戶傳送過來的request時, 至少要處理兩項參數: 用戶身份認證 資料(若存在, 則存在session中), 以及負責運作執行的script_name ex: http://myweb.xxx.xxx/user_list.php script_name 就是 user_list.php 設計的流程大致如下: //1 該script_name是否無需身份認證? (存在於 public_menu.txt 中) //1.1 是, 執行之. (case 3.) //1.2 否, 該用戶在session中是否留有登入時身份認證成功的資料(敏感資料除外)? //1.2.1 是, 檢查script_name是否存在於其所屬群組所對應的menu樣板當中? //1.2.1.1 是, 執行之. (case 4.) //1.2.1.2 否, 判斷為非法執行, 進行相關處理. (case 2.) //1.2.2 否, 將流程導入到 login 畫面. (case 1.) ※ 引述《sdallan ()》之銘言: : 大約簡述一下面板,分左右兩頁框。 : 左框放置"功能"、右框顯示"結果"。 : 左框的"功能"為 超鏈結文字 (藍色的文字,點下去就執行功能) : 基本的構想是,在資料庫中做權限設定 : 資料庫欄位,list(name,id) 。 : 資料大概為 新增學生,1。 : 更改學生,2。 : 用迴圈下去跑印出所有的列出來 = =" : 即變成 超鏈結文字=> 新增學生 : 基本上都有設session。 會把權限在登入時載入session中, : 如果使用者得知超鏈結想偷跑進去,我會先從session中做判斷,做攔劫。 : 問題在這: : 想問,有什麼辦法可以直接在迴圈內加上判斷, : 使用者有權限,再印出超鏈結文字? : 在使用者資料表內做更大的規劃欄位? 有更好的方法嗎@@? : 還請板上的高手指教。 : 在板上受教不少,借這個機會順便謝一下。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.186.105 ※ 編輯: bobju 來自: 59.104.186.105 (04/27 10:56)

04/27 11:03, , 1F
程式流程是個人發揮的地方,且一般除非很有架構及模組
04/27 11:03, 1F

04/27 11:03, , 2F
否則看不懂別人程式是常態;看不懂也不代表不會動
04/27 11:03, 2F

04/27 11:04, , 3F
倒是如何傳送最少變數且不易被hack 出來才是基本門檻
04/27 11:04, 3F

04/27 11:05, , 4F
比如,不要在 cookie 中存放 username & password..
04/27 11:05, 4F

04/27 11:13, , 5F
password不可能存在session當中.
04/27 11:13, 5F
※ 編輯: bobju 來自: 59.104.186.105 (04/27 11:35)

04/27 11:35, , 6F
謝謝您的回覆
04/27 11:35, 6F
文章代碼(AID): #19zHsBjz (PHP)
文章代碼(AID): #19zHsBjz (PHP)