builder by ZDNet Japanをご愛読頂きありがとうございます。

builder by ZDNet Japanは2022年1月31日にサービスを終了いたします。

長らくのご愛読ありがとうございました。

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

たにぐちまこと(H2O Space.)
2008-04-10 08:00:00
  • このエントリーをはてなブックマークに追加

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

 例えば、次のようなスクリプトを作ってみよう(インターネット上には公開せず、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); ?>さん

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

ブログの新規登録は、2021年12月22日に終了いたしました。

folllow builer on twitter
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]