問題描述

我已經新增了一些自定義使用者選項到我的網站上的配置檔案頁面,大多數都可以讓使用者自己修改。這些選項生活在自己的部分。使用者具有讀取訪問許可權,並且可以訪問後端並更改其配置檔案中的某些設定。

還有另一個 per-user 選項,我不希望使用者能夠直接修改。我有程式碼建立該選項組和部分檢查使用者是否可以編輯其他使用者的配置檔案。如果不能,則該部分和設定未在 WordPress 中註冊 (因此不會顯示在配置檔案頁面上) 。只有具有適當許可權的人才可以訪問編輯個人資料頁面,檢視並透過後端更改設定。

惡意使用者可以提交附加的 POST 資料,否則有效的配置檔案更新,並設定未在頁面上註冊但在資料庫中存在的選項。這種保護的確定性/穩定性?有什麼已知的問題嗎?

最佳解決辦法

您應該 (如果有) 提交您正在使用的程式碼,即使只是一個程式碼段,因此我們可以根據您的問題評估您的過程。

簡單的答案是 YES,它是安全的,只要你,

  • 防止在使用者個人資料頁面上顯示某些使用者角色的輸入欄位

  • 防止未經授權的使用者將使用者後設資料儲存到資料庫

第一:

如果與使用者後設資料相關的輸入欄位隱藏在使用者配置檔案頁面上的特定使用者角色,那麼”attacker” 將需要猜測 meta_key 是否用於要填充的欄位。祝你好運!

第二個:

如果他們能猜測到 meta_key,那麼他們需要執行與 update_user_metaadd_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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。