Kintarou'sBlog

プログラミング学習中。学習内容のアウトプットや読書で学んだことなど随時投稿!

【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>

このファイルを実行すると以下のアラートが表示されます。
f:id:ryosuke-toyama:20201031190653p:plain

今回はただアラートを表示するだけですが、もし何かしらのデータを送信するなどのコードが記述されると大変危険です。

<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>

このようにすると出力は以下のようになります。

f:id:ryosuke-toyama:20201031193223p:plain

無事エスケープ出来ました!

以上、どなたかの参考になれば幸いです😊