ホームページ >バックエンド開発 >PHPチュートリアル >PHP セッションのハイジャックと防止方法_PHP チュートリアル
セッション データの公開
セッション データには、個人情報やその他の機密データが含まれることがよくあります。このため、セッション データの漏洩は一般的な懸念事項です。一般に、セッション データはデータベースやファイル システムではなくサーバー環境に保存されるため、危険にさらされる範囲はそれほど大きくありません。したがって、セッションデータは当然ながら公開されません。
SSL の使用は、サーバーとクライアントの間で送信される際にデータが公開される可能性を最小限に抑えるための特に効果的な手段です。これは、機密データを送信するアプリケーションにとって非常に重要です。 SSL は HTTP の上に保護層を提供するため、HTTP 要求および応答内のすべてのデータが保護されます。
セッションデータ保存領域自体のセキュリティが心配な場合は、正しいキーがなければ内容を読み取れないようにセッションデータを暗号化できます。これは PHP で行うのが非常に簡単で、session_set_save_handler() を使用し、独自のセッション暗号化ストレージと復号化読み取り処理関数を記述するだけです。
セッションハイジャック
セッションに対する最も一般的な攻撃方法はセッションハイジャックです。これは、攻撃者が他の人のセッションにアクセスするために使用できるすべての手段の総称です。これらすべての方法の最初のステップは、正規のユーザーになりすますために正規のセッション ID を取得することであるため、セッション ID が漏洩しないようにすることが非常に重要です。セッションの公開と固定に関するこれまでの知識は、セッション ID がサーバーと正当なユーザーのみに知られていることを確認するのに役立ちます。
多層防御の原則は、残念ながらセッション ID が攻撃者に知られている場合に、目立たないセキュリティ対策によってある程度の保護が提供される可能性があります。セキュリティに関心を持つ開発者としての目標は、前述の偽装プロセスをより洗練させることです。障害物がどんなに小さくても、アプリケーションが保護することを忘れないでください。
偽装プロセスをより複雑にする鍵は検証を強化することです。セッション ID は主な認証方法ですが、他のデータで補足することもできます。使用できるすべてのデータは、各 HTTP リクエスト内のデータのみです:
GET / HTTP/1.1
ホスト: example.org
ユーザーエージェント: Firefox/1.0
受け入れ: text/html、image/png、image/jpeg 、 image/gif, */*
Cookie: PHPSESSID=1234
リクエストの一貫性を認識し、一貫性のない動作は疑わしいものとして考慮する必要があります。たとえば、User-Agent (このリクエストを発行したブラウザの種類) ヘッダーはオプションですが、ヘッダーを発行したブラウザは通常、その値を変更しません。セッション ID が 1234 のユーザーがログイン後、Mozilla Firefox ブラウザを使用していて、突然 IE に切り替えた場合、これは疑わしいと考えられます。たとえば、この時点でパスワードを要求することでリスクを軽減できますが、同時に、誤ったアラームが発生した場合でも、正規のユーザーへの影響が軽減されます。次のコードを使用して、ユーザー エージェントの整合性を検出できます。