web-dev-qa-db-ja.com

ユーザー出力でwp_kses()の代わりに使用するもの

ここで助けが必要です。

テーマを作成しながら、セキュリティ上の問題がないことを確認したいと思います。したがって、すべての動的データは、それがレンダリングされるコンテキストに対して正しくエスケープする必要があります。

私は次のことを免れる方法を知っています。

  • 属性に 'echo'がある場合は、esc_attrを使用してください。
  • Class属性に 'echo'がある場合は、sanitize_html_classを使用してください。
  • プレーンテキストで「echo」の場合は、esc_htmlを使用します。
  • 翻訳中に 'echo'がある場合は、esc_html__esc_html_eesc_attr_eなどを使用してください。

しかし、どうすればよいかわからない部分が2つあります。

  1. ユーザーの出力に 'em'や 'strong'などのHTMLタグが含まれている可能性がある場合は、どのようなエスケープを使用すればよいですか

例:

<?php $subtitle = get_post_meta($post_id,'subtitle', true); ?>
<h3 class="subtitle"><?php echo $subtitle; ?></h3>

"wp_ksesは高価な関数なので、データが保存されたときにだけ実行され、表示されないことを確認してください。" Proof here

  1. CSSスタイルを出力するためにどのようなエスケープを使用すればいいですか?

例:

<style type="text/css"><?php echo $css; ?></style>
6
Michael Khors

コアとなることを確認しましょう。

default-filters.phpには、コンテンツ出力が通過するものがあります。

add_filter( 'the_content', 'wptexturize'        );
add_filter( 'the_content', 'convert_smilies'    );
add_filter( 'the_content', 'convert_chars'      );
add_filter( 'the_content', 'wpautop'            );
add_filter( 'the_content', 'shortcode_unautop'  );
add_filter( 'the_content', 'prepend_attachment' );

これらのどれも実際に専用のセキュリティ/エスケープ機能ではありません。

これはコメントについても似ています。これは、ランダムな訪問者からのもので、半信頼のサイト作成者でもありません。

add_filter( 'comment_text', 'wptexturize'            );
add_filter( 'comment_text', 'convert_chars'          );
add_filter( 'comment_text', 'make_clickable',      9 );
add_filter( 'comment_text', 'force_balance_tags', 25 );
add_filter( 'comment_text', 'convert_smilies',    20 );
add_filter( 'comment_text', 'wpautop',            30 );

一言で言えば、それは 合理的に 信頼できるものであり、提出物についてスクラブされ、データベースから戻ってきたものです。

3
Rarst