Webデザイナが知っておくべきPHPセキュリティ

たにぐちまこと(H2O Space.)
2008/04/10 08:00

だいたいわかったPHP。だけどもう一つ大切なことがある。それがセキュリティだ。

クロスサイトスクリプティング

 例えば、次のようなスクリプトを作ってみよう(インターネット上には公開せず、XAMPPやMAMPなどを用いて、コンピュータ内だけで試してください(連載第1回参照))。

index.php
<p>あなたのお名前をご記入ください</p>
<form id="form1" name="form1" method="post" action="main.php">
  <input name="my_name" type="text" id="my_name" size="35" maxlength="256" />
  <input type="submit" name="btnSubmit" id="btnSubmit" value="送信する" />
</form>

main.php
こんにちは。<?php echo $_REQUEST['my_name']; ?>さん

 index.phpをWebブラウザに表示して、名前を記入すると次の画面に名前が表示されるというスクリプトだ(画像1)。

画像1 画像1

 大したことのないスクリプトに見えるが、非常に危険なセキュリティホールを含んでいる。名前の欄に、次のように記入してみよう。

<script>alert(123);</script>

 すると、次の画面のように名前が記入される代わりに、警告ウィンドウが表示される(画像2)。

画像2 画像2

 これは、本来名前を記入するべき欄に、悪意のあるユーザーがJavaScriptを記入することでWebブラウザを暴走させたものだ。上記のスクリプト内容では警告ウィンドウが表示されるだけの内容なので被害はないが、スクリプトの内容によってはWebサーバーに被害を与えたり、他の閲覧者の情報を盗むようなスクリプトを書き込まれる可能性もあり、非常に危険な状態といえる。

 これを「クロスサイトスクリプティング」などという。今回の場合、「<script>」というタグを書き込まれることがないよう、次のようにすれば防ぐことが可能だ。

main.php
こんにちは。<?php echo htmlspecialchars($_REQUEST['my_name'], ENT_QUOTES); ?>さん

 このように、スクリプトを記述する時には必ず必要な記述などもある。特にユーザーからの入力を受け付ける時には、細心の注意が必要なため、必ずエンジニアに相談してから作ると良いだろう。

  • コメント(8件)

#1 大野晋一  - 2008/04/10 14:18:17

htmlspecialchars()関数の第2引数について builder編集部の大野です... 続きを見る
» 不適切なコメントを報告する

#2 h2ospace  - 2008/04/10 18:56:57

筆者です。「htmlspecialchars」の件、うっかりしていて大変失礼いたし... 続きを見る
» 不適切なコメントを報告する

#3 がる  - 2008/04/19 01:46:29

本文中に出ている mysql_query("SELECT * FROM login_table WHERE id="... 続きを見る
» 不適切なコメントを報告する

#4 大野晋一  - 2008/04/21 20:39:44

builder編集部の大野です。 シンタックスエラーの件は大変失礼いたし... 続きを見る
» 不適切なコメントを報告する

#5 がる  - 2008/04/22 06:11:44

がるです。 大変に手厳しい発言になり恐縮ではあるのですが。 > ま... 続きを見る
» 不適切なコメントを報告する

#6 大野晋一  - 2008/04/22 17:31:55

ご指摘ありがとうございます。このままでは文字列の IDやパスワードを受... 続きを見る
» 不適切なコメントを報告する

#7 h2ospace  - 2008/04/25 13:33:30

筆者です。 > がるさん ご指摘、および詳しい解説をいただきまし... 続きを見る
» 不適切なコメントを報告する

#8 thesecret  - 2008/05/10 17:46:58

PHPはそもそも「HTMLをちょっと変えれば動くようになります」と... 続きを見る
» 不適切なコメントを報告する
記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 新着記事
  • 人気記事
  • 特集
  • ブログ
  • 読者投票
    今、使っているマシンのOSは?

    投票受付期間:2008年6月27日 〜 2008年7月11日
  • » 投票しないで結果だけ見る