なぜPHPアプリにセキュリティホールが多いのか?

【スクリプトインジェクション対策16】関連するサイトが利用しているドメイン名の一覧を提供する

一つまたは一体のサービスとしてWebサイトを構築する場合、できる限り同じドメイン名を利用すべきです。組織名やサービス名となる部分に組織名やサービス名ごとに違うドメイン名を使うのは好ましくありません。

例えば、site-name.jpというWebサイトでサイトを運営している場合、

  • www.site-name.jp
  • service.site-name.jp
  • another-service.site-name.jp

とするほうがユーザが同じサイトにアクセスしていると明確に分かりやすいです。

同じドメイン名を利用するのはフィッシング詐欺のリスクを軽減するためです。別々のドメイン名を利用していると

  • site-name.jp
  • site-name-service.jp
  • site-name-another-service.jp
  • site-name-evil.jp ←攻撃者が設置したサイト

と第三者が作ったsite-name-evil.jpと正規のサイト名が区別しづらくなります。複数のドメイン名を用いなければならないようなサービスはほとんどありません。サイトに区別が必要な場合は、新たなドメインは組織が取得したドメインのサブドメインとして作るべきです。これは大手Webサイトには必要な対策です。

既に複数のドメイン名でサービスを提供していたり、グループ企業が多数存在するためサブドメインが利用できない場合は最もブランド力が高いドメインのWebサイトでグループ企業が利用しているドメインの一覧などを用意します。このようにすれば、一般ユーザでも

  • site-name-evil.jp

のように一見正規サイトに見えるWebサイトがフィッシングサイトであることを見抜ける確率が高くなります。運がよければ被害が出る前にユーザからサイト運営者に連絡が入るかも知れません。

しかし、サブドメインを利用したサイト名の構成は直接的なセキュリティ問題も含んでいます。

  • site-name.jp
  • www.site-name.jp
  • service.site-name.jp
  • another-service.site-name.jp

のようなドメインでWebサイトを運営している場合、site-name.jpのクッキーがサブドメインでも参照できたり、service.site-name.jpなどの下位ドメインからは上位ドメインであるsite-name.jpのクッキーが設定できます。スクリプトインジェクションなどでクッキーを設定されるとセキュリティ上の問題が複数のサイトで発生します。PHPのセッション管理機構はセッションアダプションに脆弱であるため、下位ドメインから上位ドメインにクッキーを設定されるとセッションハイジャックが可能になります。

まったく別のドメインを利用するとセッションの安全性を向上できますが、フィッシンングのリスクが大きい場合は異なるドメインの利用は控えるほうがよいです。

紛らわしいドメイン名の利用は出来る限り控えるべきですが、まったく別のドメインを利用したほうがより安全になる場合もあります。例えば、ユーザがアップロードしたデータやファイルを取り扱う場合、データやファイル自体に細工し直接/間接攻撃を行えることがあります。画像やバイナリファイルを別ドメイン(注意:サブドメインではあまり効果がありません)から送信すればこれらの攻撃から防御できる場合があります。

対策のまとめ

  • 単純ミスを防ぐため、可能な限りwww.example.com, service1.example.com service2.example.comと同じドメインの深さとなるようにする(example.comは使わない)
  • サービスや目的に応じて別の組織レベルドメインを利用しない(example-service1.com, example-service2.comなど)
  • サービス/目的別の組織レベルドメインを利用する場合、最もブランド力の高いドメインで利用しているドメイン名の一覧を提供する(exmample.comでexample-service1.com/example-service2.comがexample.comの関連ドメインであることを明記する)
  • ユーザからアップロードされたコンテンツをホストする場合、まったく別ドメインを利用したほうが安全性が向上する

おすすめ記事

記事・ニュース一覧