目次
技術的な詳細
ストア管理者はプラグインを無効にする
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);}
ログイン後にコピー

呼び出しの検証ロジックは次のとおりです: このユーザーは、ID $target_user_id を使用して特定のユーザーを変更したいと考えています。実行する権限を持っていますか?

デフォルト設定では、edit_users 関数により、権限を持つユーザー (ストア管理者など) が他のユーザー (管理者ユーザーであっても) を編集し、パスワード更新などの操作を実行できます。セキュリティ上の理由から、WooCommerce ではストア管理者がユーザーを編集できるかどうかを指定する必要があるため、プラグインはメタ権限を追加する必要があります。メタ関数は current_user_can() によって呼び出すことができます。デフォルトの動作で関数によって返される値は true ですが、メタ権限関数によって返される値によって、現在のユーザーがそのような操作を実行できるかどうかが決まります。以下は、WooCommerce メタ権限フィルターの抽象関数コードです:

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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP vs. Flutter: モバイル開発に最適な選択 PHP vs. Flutter: モバイル開発に最適な選択 May 06, 2024 pm 10:45 PM

PHP と Flutter は、モバイル開発でよく使われるテクノロジです。 Flutter は、クロスプラットフォーム機能、パフォーマンス、ユーザー インターフェイスに優れており、高パフォーマンス、クロスプラットフォーム、カスタマイズされた UI を必要とするアプリケーションに適しています。 PHP は、クロスプラットフォームではなく、パフォーマンスが低いサーバー側アプリケーションに適しています。

ワードプレスでページ幅を変更する方法 ワードプレスでページ幅を変更する方法 Apr 16, 2024 am 01:03 AM

style.css ファイルを編集することで、WordPress ページの幅を簡単に変更できます。 style.css ファイルを編集し、 .site-content { max-width: [好みの幅] }; を追加します。 [好みの幅]を編集してページ幅を設定します。変更を保存し、キャッシュをクリアします (オプション)。

wordpressの記事はどのフォルダにありますか? wordpressの記事はどのフォルダにありますか? Apr 16, 2024 am 10:29 AM

WordPress の投稿は /wp-content/uploads フォルダーに保存されます。このフォルダーはサブフォルダーを使用して、年、月、記事 ID ごとに整理された記事など、さまざまな種類のアップロードを分類します。記事ファイルはプレーン テキスト形式 (.txt) で保存され、通常、ファイル名には ID とタイトルが含まれます。

ワードプレスで商品ページを作成する方法 ワードプレスで商品ページを作成する方法 Apr 16, 2024 am 12:39 AM

WordPress で製品ページを作成します。 1. 製品 (名前、説明、写真) を作成します。 2. ページ テンプレートをカスタマイズします (タイトル、説明、写真、ボタンを追加します)。 3. 製品情報 (在庫、サイズ、重量) を入力します。 4. バリエーションを作成します (さまざまな色、サイズ)。 5. 公開または非表示を設定します。 7. ページをプレビューして公開します。

ワードプレスのテンプレートファイルはどこにありますか? ワードプレスのテンプレートファイルはどこにありますか? Apr 16, 2024 am 11:00 AM

WordPress テンプレート ファイルは、/wp-content/themes/[テーマ名]/ ディレクトリにあります。これらは、ヘッダー (header.php)、フッター (footer.php)、メイン テンプレート (index.php)、単一記事 (single.php)、ページ (page.php) など、Web サイトの外観と機能を決定するために使用されます。 、アーカイブ (archive.php)、カテゴリ (category.php)、タグ (tag.php)、検索 (search.php)、および 404 エラー ページ (404.php)。これらのファイルを編集および変更することで、WordPress Web サイトの外観をカスタマイズできます。

WordPress で著者を検索する方法 WordPress で著者を検索する方法 Apr 16, 2024 am 01:18 AM

WordPress で作成者を検索します。 1. 管理パネルにログインしたら、[投稿] または [ページ] に移動し、検索バーを使用して作成者名を入力し、[フィルター] で [作成者] を選択します。 2. その他のヒント: ワイルドカードを使用して検索範囲を広げたり、演算子を使用して条件を組み合わせたり、著者 ID を入力して記事を検索したりできます。

WordPress のどのバージョンが安定していますか? WordPress のどのバージョンが安定していますか? Apr 16, 2024 am 10:54 AM

最も安定した WordPress バージョンは、最新のセキュリティ パッチ、パフォーマンスの強化、新機能と改善が導入された最新バージョンです。最新バージョンに更新するには、WordPress ダッシュボードにログインし、[更新] ページに移動して、[今すぐ更新] をクリックします。

ワードプレスの登録は必要ですか? ワードプレスの登録は必要ですか? Apr 16, 2024 pm 12:07 PM

WordPressは登録が必要です。私の国の「インターネットセキュリティ管理措置」によれば、国内でインターネット情報サービスを提供するウェブサイトは、WordPress を含め、地方のインターネット情報局に登録する必要があります。登録プロセスには、サービスプロバイダーの選択、情報の準備、申請の送信、審査と公開、登録番号の取得などのステップが含まれます。申請の利点には、法令順守、信頼性の向上、アクセス要件の満たし、通常のアクセスの確保などが含まれます。申請情報は真実かつ有効である必要があり、申請後は定期的に更新する必要があります。

See all articles