【PHP関数】htmlspecialcharsとは何か?

date_range 2023/09/17
GUARDIAN Creative BLOG
星 翼
htmlspecialchars

皆さんこんにちは!株式会社ガーディアンの星と申します!


9月中旬ですが、まだまだ暑いですね~

水分を取って頑張っていきましょ~!!!


さて今回は「htmlspecialchars」について紹介します!

「htmlspecialchars」とは?

PHPというプログラム言語でコードをテキストとして表示するときに使用する関数の事です。

PHPの公式ドキュメントではこのように書かれています。


htmlspecialchars — 特殊文字を HTML エンティティに変換する

文字の中には HTML において特殊な意味を持つものがあり、 それらの本来の値を表示したければ HTML の表現形式に変換してやらなければなりません。 この関数は、これらの変換を行った結果の文字列を返します。


引用元:PHP公式ドキュメント(閲覧日:2023.09.17)


特殊文字とは例えばこのようなものがあります。

例:「&」、「”」、「’」、「<」、「>」など

ちょっとよく分かりにくいと思うので、例を挙げます!

スクリーンショット 2023-09-18 132930

「<div>Hello World<br>Welcome</div>」という記述を「htmlspecialchars」を付けない場合と付けた場合での違いを見ていきます。

※13行目が付けない場合

※14行目が付けた場合

スクリーンショット 2023-09-18 132941

検証ツールで見てみると、上の文字は「<div>・<br>・</div>」がHTMLのタグとして表示されています。

下の文字では、「<div>・<br>・</div>」がそのまま表示されています。

なぜこのようになるかは、次のソースの画像を見ると分かります。

1695036004

赤枠の部分が「htmlspecialchars」の付けた個所の表示です。

このアンパサンド ( & ) で始まりセミコロン ( ; )で終わる謎文字のようなものを「HTML エンティティ」と言います。

特殊文字をHTML エンティティに変換されたことで、そのまま表示されるようになったということです!

htmlspecialchars関数のメリットは?

XSS(Cross-Site Scripting)攻撃を防止できるというメリットがあります。

XSS攻撃とは、ウェブアプリケーションの脆弱性を悪用して、攻撃者が悪意のあるスクリプトを他のユーザーのブラウザ上で実行させるタイプのセキュリティ攻撃の事です。


こちらも実際にコードを書いて試してみます!

スクリーンショット 2023-09-18 224740

このようなフォームを用意しました!

右の入力欄に入力していきます。

スクリーンショット 2023-09-18 225021

先ほどの入力欄に「ほし」と入力し、「Submit」ボタンを押すと上の画像の様に表示する記述を書きました。

呼び捨て笑


3行目と4行目がフォームで入力された内容を受け取る記述です。

※3行目は「htmlspecialchars」の記述なし

※4行目は「htmlspecialchars」の記述あり

現状は3行目の「htmlspecialchars」の記述なしバージョンです。


では先ほどの入力項目の中にアラートを表示させるスクリプトコードの「<script>alert('XSS攻撃')</script> 」を入力してみます!

すると、、、

スクリーンショット 2023-09-18 231421

出ちゃいました、、、

スクリプトコードが実行され、アラートの表示が出てしまいました。

つまりこの入力欄の中に悪意のあるスクリプトを入力すると、実行されヤバいことになってしまいます、、、泣


では次は4行目の「htmlspecialchars」の記述ありの方で同じようにスクリプトを入力してみます。

スクリーンショット 2023-09-18 230957

そのまま「<script>alert('XSS攻撃')</script>」と表示されましたね!

これだとスクリプトが実行されなくて安心です!

このように「htmlspecialchars」の記述を付けるとXSS攻撃を防ぐことが出来ます!

最後に

いかがでしたでしょうか?

今回はPHPの「htmlspecialchars」について書いてみました!

一言で言うと公式ドキュメントに書いてある通り「htmlspecialchars」は特殊文字を HTML エンティティに変換する関数です!


簡単にしか紹介出来ていないので、もっと詳しい内容を知りたい方はぜひPHP公式ドキュメントをご覧ください!


最後までご覧いただき、ありがとうございました!! 定期的に発信できたらと思います!

人物

クリエイティブプロダクト部 クオリティコントロール班 星 翼(ほし つばさ)



WEB関連の情報を発信していきます!

記事を読んで役に立つようなコンテンツを配信出来たらいいなと思っています!


今回使用した技術:PHP