・WordPressのエスケープ処理とは?
こんな疑問にお答えします。
WordPressのテーマを作成するとき、echo home_url()などでデータを出力しますよね。
出力するさいは、データを無害化してからするべきです。
そのまま出力してしまうと、不正操作が実行されるリスクが高まるため。
データを無害化するために行うのが、エスケープ処理です。
セキュリティを高めるためにエスケープ処理すべし!
WordPressでは、エスケープ処理を簡単に実装できる関数が提供されています。
ということで、この記事では「WordPressのエスケープ処理方法3選」について解説していきます!
・WordPressのエスケープ処理方法3選
・WordPressのエスケープ処理が必要な関数
目次
【解説】WordPressのエスケープ処理方法3選
テーマ作成におけるWordPressのエスケープ処理は、主に3つ。
- エスケープ処理:URL
- エスケープ処理:文字
- エスケープ処理:HTML属性
順に見ていきましょう!
1つ目がURLのエスケープ処理。
使う関数は「esc_url()」です。これは、URLをエスケープするためのWordPressの関数の1つ。
使用例は下記らのコードとなります。
<!-- TOPページへのリンク -->
<a href="<?php echo esc_url( home_url( '/' ) ); ?>">TOP</a>
<!-- Newsページへのリンク -->
<a href="<?php echo esc_url( home_url( '/news/' ) ); ?>">News</a>
<!-- 画像URLの指定 -->
<img src="<?php echo esc_url( get_template_directory_uri() . '/img/hoge.png' ); ?>" alt="">
エスケープ処理(esc_url()関数)が行われているため、生成されたURLは安全に出力されます!
URLが出力されるコードの場合は、esc_url()関数を使いましょう。
2つ目が文字のエスケープ処理。
使う関数は「esc_html()」です。これは、文字の出力をエスケープするためのWordPressの関数の1つ。
HTMLの特殊文字があっても、無効化して文字列として表示してくれます。
使用例は下記らのコードとなります。
<?php echo esc_html( $category->cat_name ); ?>
<?php echo esc_html( $items->name ); ?>
文字が出力されるコードの場合は、esc_html()関数を使いましょう。
3つ目がHTML属性のエスケープ処理。
使う関数は「esc_attr()」です。これは、HTML属性の値を出力時にエスケープするためのWordPressの関数の1つ。
class,alt,data属性などですね。
使用例は下記らのコードとなります。
$class = 'example-class';
<div class="<?php echo esc_attr( $class ); ?>">テキスト</div>
HTML属性の値を出力するコードの場合は、esc_attr()関数を使いましょう。
【解説】WordPressのエスケープ処理が必要・不要なもの
エスケープ処理が大事といっても、テーマ作成時に全ての出力をエスケープ処理する必要はありません。
結論:必要なのはechoを使って出力している時になります。
つまりthe_title()などは、エスケープ処理が不要です。
ただgetを使って取得したあとに、echoにて出力する場合はエスケープ処理が必要となります。
下記みたいな感じですね。
<!-- エスケープ処理が不要 -->
<?php the_title();?>
<!-- エスケープ処理が必要 -->
<?php echo esc_html( get_the_title() );?>
エスケープ処理が必要な例としてはこんな感じ。
<!-- 記事のタイトルを表示する -->
<?php echo esc_html( get_the_title() ); ?>
<!-- 記事の抜粋を表示する -->
<?php echo esc_html( get_the_excerpt() ); ?>
<!-- 記事の投稿日を表示する -->
<?php echo esc_html( get_the_date() ); ?>
<!-- 記事の投稿者の名前を表示する -->
<?php echo esc_html( get_the_author() ); ?>
<!-- 記事が属するカテゴリーを表示する -->
<?php echo esc_html( get_the_category_list( ', ' ) ); ?>
<!-- 記事が属するタグを表示する -->
<?php echo esc_html( get_the_tag_list( '', ', ', '' ) ); ?>
<!-- 記事のパーマリンクを表示する -->
<?php echo esc_url( get_permalink() ); ?>
エスケープ処理が不要な例としてはこんな感じ。
<!-- 記事のタイトルを表示する -->
<?php the_title(); ?>
<!-- 記事の本文を表示する -->
<?php the_content(); ?>
<!-- 記事の抜粋を表示する -->
<?php the_excerpt(); ?>
<!-- 記事の投稿日を表示する -->
<?php the_date(); ?>
<!-- 記事の投稿者の名前を表示する -->
<?php the_author(); ?>
<!-- 記事が属するカテゴリーを表示する -->
<?php the_category(); ?>
<!-- 記事が属するタグを表示する -->
<?php the_tags(); ?>
<!-- 記事のパーマリンクを表示する -->
<?php the_permalink(); ?>
<!-- 記事のアイキャッチ画像を表示する -->
<?php the_post_thumbnail(); ?>
【解説】WordPressのエスケープ処理方法3選【必要・不要な関数】:まとめ
- WordPressで出力のさいはエスケープ処理が必要
- 全部の出力で必要なわけではない
- echoを使う場合はエスケープ処理すべし
セキュリティを高めるためにエスケープ処理をしておこう!