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

【スクリプトインジェクション対策12】データベースなど、内部データを信用しない

既に前の項目で解説済みですが、よく見かける問題なので別項目として取り上げています。

たとえ内部システムから取得したデータであっても、そのデータの起源や管理状態が不明確な場合はデータを信用してはなりません。実際にあった例ですが、管理システムが動作ログをメールメッセージで送信し、ログ保存システムがそれを受け取ってデータベースサーバにログを保存し、管理用のWebアプリがそのデータベースから取得したログを表示するシステムがありました。ログメッセージにはHTMLタグが含まれる場合があるため管理用のWebアプリはエスケープなしにログを表示していました。ログメッセージの送信先のメールアドレスとメール形式を知っているユーザであれば、誰でも簡単にスクリプトインジェクションを行い管理者のセッションを盗むことが可能な状態でした。

メールサーバから直接ログを取得していたのであればプログラマも危険性を考慮できたかもしれません。別のシステムを経由するとリスクが明白でなくなることがよくあります。本当に信頼できるデータのみ信用できるデータとして扱わなければなりません。これは簡単なようで思ったほど簡単ではありません。システムを拡張する過程で思わぬ脆弱性を作ってしまうことは少なくありません。

対策のまとめ

  • データソースを確実に信頼できない限りデータを信用しない
  • 内部データであっても安易に信用しない
  • システムを拡張する場合は慎重に行う

おすすめ記事

記事・ニュース一覧