WordPress入門〜③エスケープして無害化する代表的な3つの関数〜


どーもみなさん!おはこんにちバンガロール!わーくんです!

前回のお話で、エスケープ処理を怠ると大変な事態に陥ることがわかっていただけたと思います。

今回はそうならないために行うエスケープ処理の代表的な3つの関数についてお話さていただきます。

▶︎データ出力時に無害化する代表的な3つの関数


WordPressでは、データ出力時にエスケープして無害化する関数が用意されています。代表的なものが「esc_html()関数」と「esc_attr()関数」、「esc_url()関数」です。

例えば、下記のコードであれば、

<p>キーワード<?php echo esc_html($_GET['s']); ?>で検索した結果です。</p>

とすれば、HTMLタグが無効になる(<や>を&lt;と&gt;に変換してくれる)ため、クロスサイトスクリプティングを防ぐことができます。

▶︎esc_html()関数とesc_attr()関数

esc_html()関数はHTMLに出力するデータを、esc_attr()関数はタグ属性に出力するデータを「<」、「>」、「&」、「'」、「"」をエスケープすることで無害化しています。

esc_html()関数の例

<p>キーワード<?php echo esc_html($_GET['s']); ?>で検索した結果です。</p>

esc_attr()関数の例

<input type="text" value="<?php echo esc_attr($_GET['s']); ?>">

▶︎esc_url()関数

esc_url()関数は、URLとして適切ではない文字を除去します。また、必要に応じて文字列の先頭に「http://」を付与し、「&」と「’」をエンコードします。

例えば、「www.mdn.co.jp/&?='URL'」という文字列が変数$userweburlに格納されている場合、

<?php $userweburl="www.mdn.co.jp/&?='URL'"; ?>
<a href="<?php echo esc_url($userweburl); ?>">Webサイト</a>

と記述すると、実際に出力されるリンクのHTMLは

<a href="http://www.mdn.co.jp/&#038;?=&#039;URL&#039;">Webサイト</a>

という形になります。

HTMLタグを許可する場合は、予め決めたタグのみ許可するようにしましょう。詳しいやり方については最終章でお話いたします。

ではまた来週!!!