MENU

allowed_tags()

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() はどのような用途で使うのが適切ですか?

allowed_tags() は、ユーザーの入力を安全にサニタイズする際に役立ちます。特に、wp_kses()wp_kses_post() と組み合わせることで、意図しない HTML の挿入を防ぐことができます。

allowed_tags()kses_allowed_html() と何が違うのですか?

allowed_tags() は一般的な許可タグのリストを取得しますが、kses_allowed_html() は特定のコンテキスト(投稿、コメントなど)に応じた許可タグを取得できます。

allowed_tags() はサニタイズ処理を行いますか?

いいえ。allowed_tags() は単に許可されているタグを取得する関数であり、実際のサニタイズは wp_kses() などを使用します。

投稿やコメントごとに異なる許可タグを設定できますか?

はい、wp_kses_allowed_html() を使えば、特定のコンテキストに応じて許可されるタグを調整できます。

まとめ

allowed_tags() は、WordPress の kses による HTML サニタイズを理解し、許可されたタグを取得するための便利な関数です。

特に、ユーザー入力の処理を行う際には、wp_kses()kses_allowed_html() などと組み合わせて活用すると、安全なサイト運営に役立ちます。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

This site uses Akismet to reduce spam. Learn how your comment data is processed.

目次