allowed_tags()
は、WordPress の特定のコンテンツに対して許可された HTML タグのリストを取得するための関数です。
ユーザー入力のサニタイズや、特定の投稿フォーマットに適したタグの制御を行う際に役立ちます。特に、wp_kses()
などのフィルタリング関数と組み合わせて使用されることが多く、不正な HTML の挿入を防ぐのに有効です。
機能の説明
この関数は、WordPress の kses
(KSES: HTML サニタイズライブラリ)によって管理されている許可済み HTML タグと属性を取得します。特定のコンテンツ(投稿、コメント、ウィジェットなど)でどのタグが許可されているかを確認するために使用されます。
この関数を使用することで、フォーム入力や投稿エディタからの HTML の安全性を高めることができ、セキュリティ対策としても役立ちます。
主な用途
- ユーザーが入力可能な HTML タグを制限する
- コメント欄や投稿の入力で許可されているタグを表示する
- サニタイズ処理の前後で、許可されているタグを確認する
シンプルなコード例
$allowed_tags = allowed_tags();
echo '<pre>' . print_r($allowed_tags, true) . '</pre>';
このコードは、許可されている HTML タグの一覧を取得し、画面に表示します。
使い方の説明
allowed_tags()
は引数を受け取らないシンプルな関数で、実行すると WordPress の kses
設定に基づいた許可された HTML タグのリストを返します。
基本的な使い方
WordPress の投稿やコメントフォームに対して、どの HTML タグが許可されているかを表示する方法。
function display_allowed_tags() {
echo '<p>使用可能なHTMLタグ: ' . allowed_tags() . '</p>';
}
add_action('wp_footer', 'display_allowed_tags');
allowed_tags()
の出力を<p>
タグ内に入れて、ページのフッター部分に表示。wp_footer
フックを利用することで、サイトのフッターに許可されているタグを確認できる。
コメントフォームのサニタイズ
$comment_content = '<script>alert("XSS Attack");</script><strong>安全なテキスト</strong>';
$sanitized_content = wp_kses($comment_content, allowed_tags());
echo $sanitized_content;
このコードでは、wp_kses()
を使用してコメントの内容をサニタイズし、許可されているタグのみを残します。<script>
タグは削除され、<strong>
タグは許可されるため保持されます。
一緒に使うことが多い関連タグ
wp_kses()
allowed_tags()
で確認したタグを基に、特定の入力をサニタイズ(安全化)する関数。
$sanitized_text = wp_kses($user_input, allowed_tags());
echo $sanitized_text;
wp_kses()
は allowed_tags()
と組み合わせて使用されることが多く、指定されたタグのみに制限しつつ HTML を保持する役割を担います。
wp_kses_post()
$sanitized_post = wp_kses_post($user_input);
echo $sanitized_post;
wp_kses_post()
は、投稿本文向けの HTML サニタイズを行います。許可されたタグは allowed_tags()
に近いものですが、追加のルールが適用されます。
追加情報で取得したい場合
allowed_tags()
の情報だけでなく、特定のコンテキストにおける許可タグを取得したい場合、以下の方法を使用できます。
特定のルールを適用した許可タグを取得
WordPress では allowed_tags()
以外にも、特定のルールを適用したサニタイズ処理が用意されています。
$context = 'post';
$allowed_html = wp_kses_allowed_html($context);
echo '<pre>' . print_r($allowed_html, true) . '</pre>';
この関数は、指定したコンテキスト(投稿、コメントなど)ごとに異なる許可タグを取得できます。
出力例
array(
'a' => array('href' => array(), 'title' => array()),
'strong' => array(),
'em' => array(),
'p' => array(),
'br' => array()
);
'post'
を指定すると、投稿の入力で許可されているタグと属性を取得。'data'
,'user_description'
,'strip'
などのコンテキストも指定可能。
想定されるトラブル
allowed_tags()
で取得できるタグが少ない
WordPress の kses
設定では、デフォルトで厳格なフィルタリングが行われます。カスタムルールを適用する場合は、kses_allowed_html
フィルターを活用して許可タグを追加できます。
function custom_allowed_tags($tags, $context) {
if ($context === 'post') {
$tags['iframe'] = array(
'src' => true,
'width' => true,
'height' => true,
);
}
return $tags;
}
add_filter('wp_kses_allowed_html', 'custom_allowed_tags', 10, 2);
このコードは、post
コンテキストに <iframe>
タグを許可するように設定します。
allowed_tags()
の出力が期待通りでない
wp_kses_allowed_html()
を使用して、より詳細な情報を取得する。kses_allowed_protocols()
を使って、URL の許可プロトコルを確認する。
特定のタグを許可したい
wp_kses_allowed_html
フィルターを使って、許可するタグをカスタマイズ。
function custom_allowed_html($tags, $context) {
if ($context === 'post') {
$tags['iframe'] = array('src' => array(), 'width' => array(), 'height' => array());
}
return $tags;
}
add_filter('wp_kses_allowed_html', 'custom_allowed_html', 10, 2);
Q&A
まとめ
allowed_tags()
は、WordPress の kses
による HTML サニタイズを理解し、許可されたタグを取得するための便利な関数です。
特に、ユーザー入力の処理を行う際には、wp_kses()
や kses_allowed_html()
などと組み合わせて活用すると、安全なサイト運営に役立ちます。
コメント