【PHP】特殊文字をエスケープする
こんにちは😊Kintarouです。
現在エンジニア転職を目指してプログラミング学習中です👨🎓
夢はフリーランスエンジニアになって働く人にとって働く事が楽しくなるシステムを作ること!
と、愛する妻と海外移住すること🗽
プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry
今回参考にさせて頂いたサイト様🙇♂️ dotinstall.com
特殊文字をエスケープする
今回はPHPで特殊文字をエスケープするための関数 htmlspecialcharsをまとめます。
仮にPHPで出力する文字列の中に <script>タグが含まれていると、それは文字ではなくコードとして読み込まれてしまい、悪意のあるコードを第3者に書き込まれる等悪用される可能性があります。
■危険なコードの例
<?php #アラートを表示するscriptタグを記述します。 $message = '<script>alert("Passwordを送信します");</script>'; ?> <html lang="ja"> <head> <meta charset="UTF-8"> <title>危険なページ</title> </head> <body> <h1>ここにPHPコードを記述します</h1> <p><?= $message; ?></p> </body> </html>
このファイルを実行すると以下のアラートが表示されます。
今回はただアラートを表示するだけですが、もし何かしらのデータを送信するなどのコードが記述されると大変危険です。
<script>タグをコードとして認識させないためにhtmlspecialcharsを使います。
■エスケープしたコードの例
<?php $message = '<script>alert("Passwordを送信します");</script>'; ?> <html lang="ja"> <head> <meta charset="UTF-8"> <title>危険なページ</title> </head> <body> <h1>ここにPHPコードを記述します</h1> <!-- htmlspecialcharsでエスケープされてるので文字列として出力されます --> <!-- ENT_QUOTESは、クォーテーションマークも文字列として認識させるためのフラグです --> <p><?= htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); ?></p> </body> </html>
このようにすると出力は以下のようになります。
無事エスケープ出来ました!
以上、どなたかの参考になれば幸いです😊