2026年8月2日
2026年8月2日
WordPressのServer-Side Request Forgery(SSRF)を防ぐ
はじめに
Server-Side Request Forgery(SSRF)は、攻撃者がサーバー側からHTTPリクエストを生成させることで、内部ネットワークへのアクセスやサービスのダウンロードなどを行う可能性がある深刻なセキュリティリスクです。WordPressサイトでは、プラグインやテーマが外部APIを呼び出す際によく見られる問題であり、適切な対策が必要となります。
この記事では、SSRF攻撃に対する防御策について説明します。特に、内部ネットワークへのアクセス制御と外部サービスとの安全な連携について詳しく解説します。
症状・背景
WordPressサイトでSSRFが発生する主な場面:
- ネットワーク機能を活用したプラグインの使用
- サードパーティ製テーマの利用
- 外部APIとの連携がある場合
手順・設定方法
ステップ1: ネットワークアクセス制御の強化
# サーバー側でHTTPリクエストを送信する機能を有効にする際には、以下のように制限を設ける。
iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT # ローカルアクセスは許可
iptables -A OUTPUT -d <内部ネットワークアドレス> -j ACCEPT # 必要な内部ネットワークへのアクセスのみ許可
iptables -P OUTPUT DROP # すべての出力パケットを拒否
ステップ2: プラグインとテーマの安全性確認
# セキュリティ脆弱性のあるプラグインやテーマを削除または無効化する。
wp plugin deactivate <脆弱なプラグイン名>
wp plugin delete <脆弱なプラグイン名>
# 安全な最新版のプラグインとテーマをインストールする。
wp plugin update --all
wp theme update --all
ステップ3: PHP設定による制限
# PHP.iniファイルに以下のように設定を追加または変更することで、SSRF対策を行う。
# allow_url_fopen を禁止 (オンデマンドでフィルタリング可能)
allow_url_fopen = Off
# URLへのオープンを許可するホスト名のリストに例外を指定(必要最小限)
allow_url_include = <安全なホスト名1>,<安全なホスト名2>
# リクエストヘッダーのフィルタリング (optional)
suhosin.request.header.blacklist = "X-Forwarded-For,X-Originating-IP"
ステップ4: 定期的な監査と更新
# サイトのセキュリティ状態を定期的に確認し、必要に応じて更新を行う。
wp core update
wp plugin update --all
wp theme update --all
注意事項
- 常に最新版のプラグインとテーマを使用すること。
- ネットワークアクセス制御は過度に厳しく設定しないように注意する。
- 定期的なセキュリティ監査を実施する。
- 既存の攻撃を検出するために、ログファイルのモニタリングを行う。
まとめ
1. ネットワークアクセス制限: サーバー側から外部へのHTTPリクエストを適切に制御することが重要です。
2. プラグインとテーマの管理: 安全なプラグインとテーマを使用し、定期的な更新を行うことが求められます。
3. PHP設定による制限: ファイルやネットワーク機能へのアクセスを制限することで、不正なリクエストを防止します。
4. 定期的な監査: 定期的にセキュリティ状態を確認し、必要な更新を行います。
5. ログモニタリング: 不審なアクティビティの検出のために、サーバーのログファイルを定期的にチェックします。
関連記事: