組み込み関数the_content
はいくつかのフィルターを通過しますが、出力をエスケープしません。HTMLや一部のスクリプトでさえ許可する必要があるため、そうすることは困難です。
出力時に、the_contentはこれらのフィルターを通過するようです(5.0以降)。
add_filter( 'the_content', 'do_blocks', 9 );
add_filter( 'the_content', 'wptexturize' );
add_filter( 'the_content', 'convert_smilies', 20 );
add_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'shortcode_unautop' );
add_filter( 'the_content', 'prepend_attachment' );
add_filter( 'the_content', 'wp_make_content_images_responsive' );
(and)
add_filter( 'the_content', 'capital_P_dangit' );
add_filter( 'the_content', 'do_shortcode' );
また、単純な文字列置換も行います。
$content = str_replace( ']]>', ']]>', $content );
そして、get_the_contentは、「more」リンクと外国語のバグに関連する小さな処理を行います。
XSSスクリプトインジェクションを妨げるものはありませんよね?
保存するとき、データは wp_kses_postによって無害化されます。しかし、これはコストのかかるプロセスであるため、出力で使用されない理由を理解しています。
WordPressのエスケープの経験則は、入力の衛生状態に関係なく、できるだけ遅く、すべてをエスケープする必要があるということです。データベースは信頼できるソースとは見なされないため、これを述べた記事をいくつか読んだことがあります。
しかし、上記の理由により、the_contentはそれに従いません。コアテーマ(つまり、TwentyNineteen)も、出力のエスケープを追加しません。
では、なぜ他の場所から脱出するのに役立つのでしょうか?私がデータベースへのアクセス権を持つハッカーである場合、自分のコードを投稿のコンテンツに追加するだけではないですか?
wp_kses_post