なぜ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の関連ドメインであることを明記する)
- ユーザからアップロードされたコンテンツをホストする場合,まったく別ドメインを利用したほうが安全性が向上する
補講
- 【スクリプトインジェクション対策19】ユーザを教育する
- 【スクリプトインジェクション対策18】ログイン処理を正しく実装する
- 【スクリプトインジェクション対策17】パスワードを正しく管理する
- 【スクリプトインジェクション対策16】関連するサイトが利用しているドメイン名の一覧を提供する
- 【スクリプトインジェクション対策15】JavaScriptが無効なクライアントでも利用可能なサイトにする
- 【スクリプトインジェクション対策14】HTML,CSS,JavaScriptの生成はホワイトリスト方式を利用する
- 【スクリプトインジェクション対策13】不正な文字データを保存できないようにする
- 【スクリプトインジェクション対策12】データベースなど,内部データを信用しない
- 【スクリプトインジェクション対策11】エスケープしてはならないデータ以外はすべてエスケープする
- 【スクリプトインジェクション対策10】すべての入力値を可能な限り厳しい条件で検証する
-
Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?
本書は,Webサイトのセキュリティ確保のために必要な基礎知識と,安全なコードを書くために必要な基礎知識を解説しています。Webアプリケーションは比較的簡単に作成で...
-
はじめてのPHP言語プログラミング入門
Webアプリケーション構築ツールとしてPHPを取り上げた書籍は数多くありますが,言語の解説・入門書としての書籍はあまりありません。 本書は,プログラミング言語として...


