WordPress外掛WooCommerce任意檔案刪除漏洞怎麼解決
技術細節
WordPress的權限處理機制主要是透過給不同角色提供不同的功能來實現的,當商舖管理員角色被定義之後,它便會給這個角色分配edit_users功能,這樣他們就可以直接管理商舖的客戶帳號了。整個權限分配過程發生在插件插件餓的安裝過程當中。 woocommerce/includes/class-wc-install.php:
//Shop manager role.add_role( 'shop_manager', // Internal name of the new role 'Shop manager', // The label for displaying array( // Capabilities ⋮ 'read_private_posts' => true, 'edit_users' => true, 'edit_posts' => true, ⋮ ));
角色權限資訊會以WordPress核心設定儲存在資料庫中,這也就表示使用者角色現在已經獨立於插件了,即使插件不啟用,也不會影響到相關的角色權限。
當一名經過驗證的使用者嘗試修改其他使用者資訊時,便會呼叫current_user_can()函數,然後確保只有特權使用者可以執行此操作。 current_user_can()函數呼叫範例:
$target_user_id= $_GET['target_user_id'];if(current_user_can('edit_user',$target_user_id)) { edit_user($target_user_id);}
呼叫的驗證邏輯如下:這個用戶想使用$target_user_id這個ID來修改特定的用戶,他是否有權限執行?
預設配置下,edit_users功能允許有權限的用戶(例如商舖管理員)來編輯其他用戶,甚至是管理員用戶,然後執行類似密碼更新這樣的操作。出於安全因素考慮,WooCommerce需要指定商舖管理員是否能夠編輯用戶,因此,外掛程式需要增加meta權限功能。 Meta功能可以被current_user_can()呼叫。預設行為下函數傳回的值為true,但meta權限函數傳回的值可以決定目前使用者是否可以執行這樣的操作。以下給出的是WooCommerce meta權限過濾器的抽象函數程式碼:
function disallow_editing_of_admins( $capability, $target_user_id ) { // If the user is an admin return false anddisallow the action if($capability == "edit_user"&& user_is_admin($target_user_id)) { return false; } else { return true; }}add_filter('map_meta_cap', 'disallow_editing_of_admins');
比如說,當current_user_can('edit_user', 1)被呼叫時,過濾器將會判斷ID為1 ($target_user_id)的使用者是否是管理員,並根據結果來決定是否允許使用者操作。
商舖管理員停用外掛程式
預設情況下,只有管理員可以停用外掛程式。但是這個漏洞允許商舖管理員刪除伺服器上的任意可寫文件,所以我們我們額可以透過刪除WooCommerce的主文件-woocommerce.php來禁止WordPress載入該外掛程式。
這個檔案刪除漏洞存在於WooCommerce的日誌記錄功能中,日誌會以.log檔案的形式儲存在wp-content目錄中。當商鋪管理員想要刪除日誌檔時,他需要以GET參數來提交檔名。下面顯示的程式碼片段就是存在漏洞的部分:
woocommerce/includes/admin/class-wc-admin-status.php
class WC_Admin_Status{ public static function remove_log() { ⋮ $log_handler = newWC_Log_Handler_File(); $log_handler->remove(wp_unslash($_REQUEST['handle']));}
woocommerce/includes/log-handlers/class-wc -log-handler-file.php
class WC_Log_Handler_File extends WC_Log_Handler{ public function remove($handle) { ⋮ $file = trailingslashit(WC_LOG_DIR) .$handle; ⋮unlink($file);
這裡的問題就在於,檔案名稱($handle)會被加入到日誌目錄(wp-content/wc-logs/)後,然後傳遞給unlink( )函數。設定「$handle../../plugins/woocommerce-3.4.5/woocommerce.php」時,檔案wp-content/wc-logs/../../plugins/woocommerce-3.4.5/woocommerce. php將會被刪除,並導致WooCommerce被停用。
以上是WordPress外掛WooCommerce任意檔案刪除漏洞怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

有四種方法可以調整 WordPress 文章列表:使用主題選項、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代碼(在 functions.php 文件中添加設置)或直接修改 WordPress 數據庫。

WordPress 屏蔽 IP 的插件選擇至關重要。可考慮以下類型:基於 .htaccess:高效,但操作複雜;數據庫操作:靈活,但效率較低;基於防火牆:安全性能高,但配置複雜;自行編寫:最高控制權,但需要更多技術水平。

要使用 WordPress 主機建站,需要:選擇一個可靠的主機提供商。購買一個域名。設置 WordPress 主機帳戶。選擇一個主題。添加頁面和文章。安裝插件。自定義您的網站。發布您的網站。

WordPress 編輯日期可以通過三種方法取消:1. 安裝 Enable Post Date Disable 插件;2. 在 functions.php 文件中添加代碼;3. 手動編輯 wp_posts 表中的 post_modified 列。

更換 WordPress 主題頭部圖片的分步指南:登錄 WordPress 儀錶盤,導航至“外觀”>“主題”。選擇要編輯的主題,然後單擊“自定義”。打開“主題選項”面板並尋找“網站標頭”或“頭部圖片”選項。單擊“選擇圖像”按鈕並上傳新的頭部圖片。裁剪圖像並單擊“保存並裁剪”。單擊“保存並發布”按鈕以更新更改。

在WordPress中創建自定義頁頭的步驟如下:編輯主題文件“header.php”。添加您的網站名稱和描述。創建導航菜單。添加搜索欄。保存更改並查看您的自定義頁頭。

WordPress 錯誤解決指南:500 內部服務器錯誤:禁用插件或檢查服務器錯誤日誌。 404 未找到頁面:檢查 permalink 並確保頁面鏈接正確。白屏死機:增加服務器 PHP 內存限制。數據庫連接錯誤:檢查數據庫服務器狀態和 WordPress 配置。其他技巧:啟用調試模式、檢查錯誤日誌和尋求支持。預防錯誤:定期更新 WordPress、僅安裝必要插件、定期備份網站和優化網站性能。

WordPress 網站中啟用評論功能:1. 登錄管理面板,轉到 "設置"-"討論",勾選 "允許評論";2. 選擇顯示評論的位置;3. 自定義評論表單;4. 管理評論,批准、拒絕或刪除;5. 使用 <?php comments_template(); ?> 標籤顯示評論;6. 啟用嵌套評論;7. 調整評論外形;8. 使用插件和驗證碼防止垃圾評論;9. 鼓勵用戶使用 Gravatar 頭像;10. 創建評論指
