PHP

PHPでhtmlspecialcharsを使ったエスケープ処理をしてみた!

クロスサイトスクリプティング(XSSって知ってますか??

クロスサイトスクリプティングは、サイバー攻撃の1つで、入力フォームなどを入力するさいに、悪意のあるデータを入力してスクリプトを実行させるものです。

この記事では、htmlspecialcharsを使ったエスケープ処理で、クロスサイトスクリプティングの対策をするコードを紹介します。

 

ここまで、わかりにくい言葉ばかりでてきましたが、下記ではなるべく初心者でも理解できるように説明しますので、ご安心ください。

クロスサイトスクリプティング(XSS)って何?

まず、クロスサイトスクリプティング(XSS)ですが、どうゆうものなのかよくわからない方のために、わかりやすいように画像で説明します。

例としてこんなテキストボックスがあったとします。そしてテキストボックスに「こんにちは」と入れて、ボタンを押してみます。

ボタンを押すと、テキストボックスの下に、テキストボックスに打ち込んだものが表示されます。

コードとしては、こんな感じです。前提としてPHPによりコードを書いています

<?php
$message = filter_input(INPUT_POST, 'message');
?>


<main>


  <form action="index.php" method="post">

    <input type="text" name="message" >

    <button>押す</button>

   </form>


   <div>

    <?php echo $message ?>

   </div>


</main>

 

では、ここでテキストボックスにPHPのコードを書いたらどうなるでしょうか??

今回は、PHPでアラートを出すコードをテキストボックスに入力してみます。

するとアラートが表示されます。つまり、テキストボックスに記入したPHPのコードが機能してしまっています。

今回の例では、アラートを出すだけでしたが、この方法でテキストボックスに悪意のあるコードを記入されると、個人情報を抜き取られたり、ウイルス感染を引き起こすなどの被害が起こる可能性があります。

こうした、セキュリティの脆弱性をついた攻撃をクロスサイトスクリプティングといいます。

エスケープ処理でクロスサイトスクリプティングを回避

では、クロスサイトスクリプティングは、どのように防げばよいのか。

防ぐ方法は色々とありますが、今回は、htmlspecialcharsを使ったエスケープ処理による方法を説明します。

とは言っても非常に簡単で、ステップは2つだけです。

1つ目は、下記のコードを記入します。

<?php
function h($str){

  return htmlspecialchars($str , ENT_QUOTES , "UTF-8");

};

?>

そして、テキストで入力したものが出力される部分を”h()”で囲うだけです。

   <?php echo h($message) ?>

 

簡単ですよね!!

前章で紹介したコードにエスケープ処理をしたコードを記入したのが書きのコードです。

<?php
function h($str){

  return htmlspecialchars($str , ENT_QUOTES , "UTF-8");
};



$message = filter_input(INPUT_POST, 'message');

?>

<main>


  <form action="index.php" method="post">

     <input type="text" name="message" >

     <button>押す</button>
 
  </form>


  <div>

     <?php echo h($message) ?>

   </div>


</main>

 

このエスケープ処理をしたコードで、上記と同じようにアラートを出すコードをテキストボックスに入力してみます。

 

すると今度は、アラートが表示されることなく、コードがそのまま出力されています。

 

まとめ

いかがでしたか?凄く簡単ですよね!

htmlspecialcharsを使ったエスケープ処理は、最低限のセキュリティになりますが、クロスサイトスクリプティング攻撃に有効な方法ですので、是非、覚えておきましょう。