ドキュメント / Sentinel Security / 機能

REST API診断

REST API診断

REST API診断は、WordPress REST API の各エンドポイントのアクセス制御状態を検査し、情報漏洩リスクをスコアリングする機能です。

なぜREST APIの診断が必要なのか

WordPress の REST API はデフォルトで有効化されており、多くのエンドポイントが認証なしでアクセスできます。これにより以下のリスクが生じます。

  • ユーザー情報の漏洩: /wp-json/wp/v2/users で管理者のユーザー名を取得される
  • 投稿データの漏洩: 下書き記事や非公開情報がAPIで読めてしまう
  • プラグイン情報の露出: インストールされたプラグインのバージョンが特定される
  • 攻撃の足がかり: 取得した情報をもとに、ブルートフォース攻撃やゼロデイ攻撃が行われる
特に /wp-json/wp/v2/users エンドポイントはユーザー名列挙攻撃に悪用されやすく、ブルートフォース攻撃の第一歩となります。

診断項目(28項目)

ユーザー・認証(5項目)

チェック項目リスク内容危険度
/wp/v2/users エンドポイントユーザー一覧取得可否🔴 高
?author=N 列挙Author IDでのユーザー名特定🔴 高
/wp/v2/users/me認証なしでの自分の情報露出🟠 中
/wp/v2/settings認証なしでのサイト設定取得🔴 高
センシティブエンドポイントの匿名アクセス制限エンドポイントの認証要件確認🔴 高

コンテンツ(5項目)

チェック項目リスク内容危険度
/wp/v2/media アップロード認証なしのメディアアップロード🔴 高
/wp/v2/comments 匿名投稿認証なしのコメント投稿🟠 中
下書き・非公開投稿の露出未公開コンテンツへのアクセス🔴 高
リビジョン露出投稿の改訂履歴取得🟡 低
検索エンドポイント検索経由の情報収集🟡 低

システム・インフラ(11項目)

チェック項目リスク内容危険度
REST API ステータスREST APIの有効状態🟠 中
REST API ルート一覧全エンドポイントの露出🟠 中
テーマ・プラグイン情報露出REST API経由のプラグイン・テーマ情報🔴 高
WordPress バージョン露出APIレスポンスでのバージョン情報🟠 中
oEmbed 露出oEmbed経由の情報漏洩🟠 中
CORS 設定クロスオリジンリクエストの許可状態🟠 中
レート制限REST APIのレート制限設定有無🟠 中
HTTP ベーシック認証API上のベーシック認証露出🟡 低
アプリケーションパスワードアプリケーションパスワード認証🟠 中
REST プレフィックスデフォルトの /wp-json の使用🟡 低
JWT 認証JWTトークンの取り扱い🟡 低

コンテンツタイプ・タクソノミー(3項目)

チェック項目リスク内容危険度
投稿タイプの露出カスタム投稿タイプの情報🟡 低
タクソノミーの露出タクソノミー構造の情報🟡 低
メディアメタデータ露出EXIFとファイルメタデータ🟡 低

APIセキュリティ(4項目)

チェック項目リスク内容危険度
ネームスペース露出APIネームスペースの列挙🟡 低
カスタムエンドポイントのセキュリティプラグイン追加エンドポイントの権限確認🟠 中
APIフィルターセキュリティフック・フィルターの悪用可能性🟡 低
ノンス検証APIエンドポイントのCSRF保護🟠 中

XML-RPC(1項目)

チェック項目リスク内容危険度
xmlrpc.php 有効XML-RPC経由のブルートフォース・DDoS悪用🔴 高

スコア計算方式

各項目は「重み」を持ち、検出された問題の重大度に応じてスコアが減点されます。

  • 🔴 高危険度: -10〜-15点
  • 🟠 中危険度: -5〜-8点
  • 🟡 低危険度: -2〜-3点
満点(100点)から減算されたスコアが最終評価となります。
スコア評価
90〜100優秀: ほぼすべてのリスクが対策済み
70〜89良好: 主要なリスクは対策済み
50〜69要改善: いくつかの重要なリスクが残っている
0〜49危険: 早急な対策が必要

診断の実行方法

  1. SentinelSecurityREST API を開きます
  2. 今すぐ診断 ボタンをクリックします
  3. 各チェック項目の結果がカード形式で表示されます

診断結果の活用

診断結果で指摘された問題は、API保護 機能で一括して対策できます。環境によっては以下の手動対策も有効です。

応急的な対策(手動)

ユーザー列挙の防止(functions.phpに追加):

// REST APIでのユーザー列挙を無効化
add_filter('rest_endpoints', function($endpoints) {
    unset($endpoints['/wp/v2/users']);
    return $endpoints;
});

XML-RPCの無効化:

add_filter('xmlrpc_enabled', '__return_false');

管理画面での対策

API保護 機能を有効にすることで、管理画面から必要なエンドポイントだけを選択的にブロックできます。詳しくは「API保護」のドキュメントをご参照ください。