問題描述
我已經添加了一些自定義用户選項到我的網站上的配置文件頁面,大多數都可以讓用户自己修改。這些選項生活在自己的部分。用户具有讀取訪問權限,並且可以訪問後端並更改其配置文件中的某些設置。
還有另一個 per-user 選項,我不希望用户能夠直接修改。我有代碼創建該選項組和部分檢查用户是否可以編輯其他用户的配置文件。如果不能,則該部分和設置未在 WordPress 中註冊 (因此不會顯示在配置文件頁面上) 。只有具有適當權限的人才可以訪問編輯個人資料頁面,查看並通過後端更改設置。
惡意用户可以提交附加的 POST 數據,否則有效的配置文件更新,並設置未在頁面上註冊但在數據庫中存在的選項。這種保護的確定性/穩定性?有什麼已知的問題嗎?
最佳解決辦法
您應該 (如果有) 提交您正在使用的代碼,即使只是一個代碼段,因此我們可以根據您的問題評估您的過程。
簡單的答案是 YES,它是安全的,只要你,
-
防止在用户個人資料頁面上顯示某些用户角色的輸入字段
-
防止未經授權的用户將用户元數據保存到數據庫
第一:
如果與用户元數據相關的輸入字段隱藏在用户配置文件頁面上的特定用户角色,那麼”attacker” 將需要猜測 meta_key 是否用於要填充的字段。祝你好運!
第二個:
如果他們能猜測到 meta_key,那麼他們需要運行與 update_user_meta 或 add_user_meta 相關的功能。他們唯一可以做到的就是如果,
-
他們可以看到輸入字段
-
您沒有通過條件語句檢查用户功能。
… 然後允許用户保存或編輯那些應該隱藏的用户元字段,而不是在屏幕上添加/呈現給請求。
我們假設,
-
您不會為用户提供任何其他方式來運行自己選擇的任何腳本,您的網站上的其他任何地方
… 首先減輕了發生攻擊的風險。
一開始就是把與在 current_user_can 函數中添加或編輯用户元數據有關的功能。
if ( current_user_can('edit_users') ) {
//show input fields function
//allow input fields to be updated function
}
這樣可以檢查當前用户是否可以實際使用 edit_users,否則 by default is only available to Super Administrators and Administrators 除非您另行允許此功能與您選擇的其他用户角色相關。
這不是您可能希望做的唯一的檢查,但它肯定是包括安全的更重要的一個。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。