目錄
技術細節
商舖管理員停用外掛程式
woocommerce/includes/admin/class-wc-admin-status.php
woocommerce/includes/log-handlers/class-wc -log-handler-file.php
首頁 運維 安全 WordPress外掛WooCommerce任意檔案刪除漏洞怎麼解決

WordPress外掛WooCommerce任意檔案刪除漏洞怎麼解決

May 13, 2023 pm 06:16 PM
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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

wordpress文章列表怎麼調 wordpress文章列表怎麼調 Apr 20, 2025 am 10:48 AM

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

wordpress屏蔽ip的插件有哪些 wordpress屏蔽ip的插件有哪些 Apr 20, 2025 am 08:27 AM

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

wordpress主機怎麼建站 wordpress主機怎麼建站 Apr 20, 2025 am 11:12 AM

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

wordpress編輯日期怎麼取消 wordpress編輯日期怎麼取消 Apr 20, 2025 am 10:54 AM

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

wordpress主題頭部圖片如何更換 wordpress主題頭部圖片如何更換 Apr 20, 2025 am 10:00 AM

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

wordpress怎麼寫頁頭 wordpress怎麼寫頁頭 Apr 20, 2025 pm 12:09 PM

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

wordpress出現錯誤怎麼辦 wordpress出現錯誤怎麼辦 Apr 20, 2025 am 11:57 AM

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

wordpress評論怎麼顯示 wordpress評論怎麼顯示 Apr 20, 2025 pm 12:06 PM

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

See all articles