概要
wp_sanitize_redirect関数は、URLの文字列をサニタイズするための関数です。この関数は、リダイレクトを行う際に、脆弱性を避けるためにURLを安全な形式に変換するために使用されます。主に以下のようなシナリオで使われます。
- 不正なデータによるリダイレクト攻撃を防ぐ場合
- URLを正しい形式に整形する場合
- URLに埋め込まれた空白や特殊文字を処理する場合
- プラグインやテーマのリダイレクト機能を実装する場合
- フィルターフックと組み合わせて、独自のリダイレクト処理を行う場合
- ユーザーの入力したURLを安全にハンドリングする場合
- 不正なスキーム(例: javascript:)を排除する場合
- SSL/HTTPSリダイレクトを実施する場合
構文
wp_sanitize_redirect( string $location )
パラメータ
$location: サニタイズするURL文字列。
戻り値
- サニタイズされたURL文字列。
関連する関数
使用可能なバージョン
- WordPress 4.4.0以降
コアファイルのパス
wp-includes/pluggable.php
この関数のアクションでの使用可能性
| アクション | 使用例 |
|---|---|
| mu_plugin_loaded | |
| registered_post_type | |
| plugins_loaded | |
| wp_roles_init | |
| setup_theme | |
| after_setup_theme | |
| set_current_user | |
| init | 〇 |
| register_sidebar | |
| wp_loaded | 〇 |
| send_headers | |
| parse_query | |
| pre_get_posts | |
| wp | |
| template_redirect | 〇 |
| get_header | |
| wp_head |
サンプルコード
-
基本的なURLのサニタイズ
$unsafe_url = "http://example.com/?param=<script>alert('xss');</script>"; $safe_url = wp_sanitize_redirect($unsafe_url); // $safe_urlは "http://example.com/?param=" になります説明: ユーザーが悪意のあるスクリプトを埋め込んだURLをサニタイズし、安全なURLに変換します。
-
リダイレクトURLの設定
$redirect_url = "http://example.com/some-page/"; wp_redirect(wp_sanitize_redirect($redirect_url)); exit;説明: 安全なURLを生成し、そのURLにリダイレクトします。
-
URLエンコーディングの処理
$input_url = "http://example.com/search?query=normal query"; $sanitized_url = wp_sanitize_redirect($input_url); // 空白はエンコードされます説明: 入力されたURLの空白をエンコードし、安全な形式にします。
-
不正なスキームの排除
$malicious_url = "javascript:alert('xss')"; $sanitized_url = wp_sanitize_redirect($malicious_url); // $sanitized_urlは空の文字列になる説明: 不正なJavaScriptスキームを含むURLを処理し、安全でないため空の文字列が戻ります。
-
HTTPSへの強制リダイレクト
$http_url = "http://example.com/non-secure-page"; $redirect_url = wp_sanitize_redirect(str_replace("http://", "https://", $http_url)); wp_redirect($redirect_url); exit;説明: HTTP URLをHTTPSに変換し、サニタイズ後にリダイレクトします。