Web開発をする上で必須となるセキュリティ対策の一つであるエスケープ処理について今回は解説していきます。
流れとしては、HTMLの特性からクロスサイトスクリプティング攻撃について解説し、エスケープ処理によってどのようなセキュリティ対策が行われるのかを説明していきたいと思います。
1.HTMLの特性
1-1.HTMLのタグについて
ご存知の方も多いかとおももいますが、HTMLでは<h1>や<a>など様々なタグを使用してマークアップを行い、そのマークアップした内容をブラウザが読み込むことでwebページとして表示します。
<h1>タグであれば、<h1></h1>に囲まれた文字が太字になったり、<a>タグであれば<a></a>で囲まれた文字が別サイトへ飛ぶリンクとして表示されます。
このようにHTMLは様々なタグを用いることによってwebページを表示することができていますが、それのどこに問題があるのでしょうか。
問題の一つにJavaScriptがあります。
1-2.JavaScriptの実行方法
Webブラウザ上で動作するプログラム言語であるJavaScriptですが、プログラムの呼び出し方法として、<script></script>の間にプログラムを書いたり、<script src=”ソースURL”>というように、ソースコードのURLを指定してプログラムを呼び出します。
通常、開発者が作成したページを閲覧者が閲覧するという機能である場合、JavaScriptのソースコード自体は開発者が書くものであるため、HTMLに対して動きを持たせるためのプログラムとして機能し、Webページへの悪影響はありません。
2.クロスサイトスクリプティング
しかし、ブログサイトや掲示板などサイトの管理者や開発者以外の人が、記事や意見などの文字情報を入力して投稿するサービスのように、開発者以外の人がページを作成したり、編集することが可能なページになるとセキュリティ上問題を抱えることになります。
例えば次のようなPHPプログラムがあり、ユーザーが入力したブログの投稿記事の内容が変数$postedContentに格納されているとします。
<p><?pho echo $postedContent; ?></p>
もし、変数内に「</p><script>console.log(‘bug’)</script><p>」が格納されている場合、「console.log(‘bug’)」というJavaScriptプログラムがが実行されてしまいます。
このJavaScriptの仕様を悪用して、個人情報を非同期通信で送信したり、ブラウザのアラートを永遠に出し続けてそのwebサイトが利用不可能にするようなプログラムを実行する攻撃をクロスサイトスクリプティングといいます。
3.エスケープ処理
このクロスサイトスクリプティングを防ぐのがエスケープ処理になります。
これらのタグなどHTML上で機能を表す文字を、何の意味も持たない文字に変換します。
なので、エスケープ処理を施すことによって、上記の「</p><script>console.log(‘bug’)</script><p>」はJavaScriptプログラムはブラウザ上でプログラムが実行されずに、ただの文字として表示されます。
4.PHPのエスケープ処理
htmlspecialchars関数を使用することで関数のエスケープ処理を実現することが可能です。
使用方法については下記ドキュメントをご参考ください。
本日は以上になります。最後まで閲覧くださりありがとうございました。