支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


PHP言語のhtmlspecialcharとは

PHP言語には、htmlspecialcharsという関数があります。このPHP言語のhtmlspecialcharsという関数を利用するとHTMLタグなどに使われる特殊文字をエスケープし、クロスサイトスクリプティング(XSS)や悪意のあるスクリプトによる攻撃を防ぐことができます。この記事では、何故エスケープ処理が必要なのかとクロスサイトスクリプティングとはどのような攻撃なのかhtmlspecialcharsの利用法について紹介していきます。

何故エスケープ処理が必要なのか

スマートフォンなどの普及に伴いIT産業発展したのでWeb開発者にしか関係なかったエスケープ処理は開発者以外のマーケティング担当者やWebライターにも関係してくる重要な処理になりました。このエスケープは日本語に訳すと「逃亡する」、「脱出する」という意味でWebにおいては半角記号を変換もしくは削除する機能のことです。このエスケープ処理は

  • ブログのコメント機能
  • SNSの入力欄
  • ユーザー登録やログインの入力画面

などで用いられており、主に文字や記号の入力が伴うところにはこの処理が施されています。
これらのコメント機能や入力欄では半角記号の「<」や「>」を入力しても、多くの場合、自動的に消されてるようになっています。何故これらにエスケープ処理がされているかというと「意図しない挙動が起こる」ことを防ぐためです。コメント機能、やSNSの入力欄はユーザーが自由に文字を入力できるという利便性がある反面、プログラムのコード入力するとWeb開発者・管理者の方で設定されていない「意図しない挙動」が実行されてしまうことがあるのです。例えばポップアップを表示させるJavaScriptのコードをエスケープ処理がされてないブログなどのコメント欄に入力するとWeb開発者・管理者の方ではポップアップ表示を設定していないのに、勝手にポップアップが表示さてしまいます。
さらに酷いケースだとコメント入力後に自動的にサイト移動が促された後、cookie情報を盗まれ、不正ログインが可能になります。その結果、ユーザー情報を抜き取られたり、フィッシングサイトに誘導されたりして、結果的に不正な金銭の要求が発生したりします。これがクロスサイトスクリプティング(XSS)です。 基本的にこのような「意図しない挙動」の防止、クロスサイトスクリプティング攻撃を防ぐためにユーザーが自由に入力できる機能にはエスケープ処理をすることが必須になっています。

クロスサイトスクリプティング

先に述べたように掲示板サイトやTwitterのような、ユーザからの入力内容をWebページに表示するWebアプリケーションにおいて、ウェブサイトの脆弱性を利用した攻撃手法がクロスサイトスクリプティングです。コメント入力やユーザー登録画面のようなユーザーに入力する画面において発生するリスクなのでWeb開発者だけでなくマーケティング担当者やWebライターにもエスケープ処理に関する知識が必要になります。

開発者側はエスケープ処理などで発生を防ぐことはできますが開発者側だけではなくサービスの受け手も被害を受けないように対策をする必要があります。対策としては、いつも利用しているサイトであっても表示内容に注意し、安易にクリック・情報入力しないということが一番です。しかし、悪意がある攻撃者側もあの手この手で言葉巧みに情報入力させるため工夫をしています。筆者もWebページ閲覧時、突然ポップアップが開き、「あなたがこのWebサイト閲覧者10万人目です!おめでとうございます!新型iPhoneをお送りします」といった内容が表示され、住所や、電話番号、メールアドレスを入力させられそうになったことがあります。勿論入力はしませんでしたが、Webサイト閲覧する機会が少ない人やクロスサイトスクリプティングに関する知識が少ない人は入力してしまいそうな巧みな手口でした。この時点で住所や、電話番号、メールアドレスなどを入力してしまうと情報が抜かれてしまうので絶対に入力してはいけません。

PHPでのhtmlspecialcharsの使い方

では、次にPHPにおいてhtmlspecialcharsを使用したエスケープ処理の仕方について紹介します。PHPではhtmlspecialcharsを使用することでエスケープ処理ができますが、他言語では違う方法でエスケープ処理をする場合がほとんどなので注意してください。 PHPにおけるhtmlspecialcharsの使い方は以下の通りです。

htmlspecialchars([エスケープする文字列], ENT_QUOTES|ENT_HTML5, "UTF-8");
第二引数はエスケープの方法を指定しています。デフォルトでは「 ENT_COMPAT | ENT_HTML401 」となっていますが基本的に「 ENT_QUOTES 」を指定します。 第三引数は、エンコードする文字コードを指定し、省略した場合は、PHP のバージョンによってデフォルト値が変わります。HP 5.6.0 以降であればdefault_charset のデフォルトはUTF-8、PHP5.4 以前の default_charsetのデフォルト値はISO-8859-1です。この処理を行うことで「&」「<」「>」などの特殊文字がエスケープされ悪意のあるコードを打ち込むことを防ぐことができます。

まとめ

以上がエスケープ処理の必要性とPHP言語におけるエスケープのやり方です。Web開発でよく用いられているPHP言語において必ずと言っていいほど用いられている知識なので是非習得を目指してみてください。