php note



 

PHP Note(トップページ) > 02.基本的な関数 > 01.文字列処理 > htmlspecialchars関数でサニタイジングしよう!







[Note] htmlspecialchars関数でサニタイジングしよう!

PHPの利用目的の大きな1つとして、HTMLフォームからのデータの受信があります。PHPでは、フォームから取得したPOST型データや、URLから取得したGET型データなどを非常に簡単に、サーバー側に引渡しDBに登録したり、ブラウザに表示させたりといったことができます。これにより多くの方がプログラミングの醍醐味を味わったのではないでしょうか。しかしながら、このフォームからのデータのやりとりやどは、データをそのまま扱いますとセキュリティ上非常に危険なのです。その危険を回避するために、サニタイズ(消毒するというように意味)をするのが一般的となっています。

PHPにおいてサニタイズに欠かせないのが、「htmlspecialchars」関数です。
以下にhtmlspecialchars関数の使用例を示します。

<?php
 $data = “<script>test</script>”;
 echo htmlspecialchars($data);
?>

上記を実行すると、ブラウザ上では以下のように表示されます。

 <script>test</script>

普通じゃないか?と思われるかもしれませんが、普通であれば、「タグ」はブラウザでは表示されないはずなのです。htmlspecialcharsは定められた特殊記号を、純然たる文字列としてあつかうように変換してしまうので、上記の「test」という箇所に、悪意あるスクリプトが埋め込まれていたとしても、スクリプトではなく文字列をみなして実行しないということになります。このような処理をサニタイズといっています。

上記のhtmlspecialcars関数により、「<」→ 「&lt;」、「>」→ 「&gt;」という変換が行われており、「&lt;」、「&gt;」をブラウザは「<」、「>」という文字列として表示しているというわけです。これが、「&lt;」などに変換されていないと、「<script>~</script>」が、タグとして認識されjavascriptなどを実行してしまいます。javascriptは他のサーバーから、さらにスクリプトを呼び出したりすることができますので、これらのタグを放置する掲示板などを作成してWeb上にアップしてしまうと大変危険だといわざるを得ません。

以下にhtmlspecialchars関数で変換される特殊記号を一覧にまとめておきます。


変換前
変換後
 &
&amp;
 "
&quot;
 '
&#039;
 <
&lt;
 >
&gt;







[ カテゴリ一覧 ]

 |  01.基本構文  |  02.基本的な関数  |