サーバーがユーザーに対して持っている信頼を考えてみましょう。
セッションの固定: 固定を避けるためにsession_regenerate_id()
、認証 (login.php) でのみ使用します
セッション サイドジャッキング: サイト全体の SSL 暗号化。
私は安全ですか?
サーバーがユーザーに対して持っている信頼を考えてみましょう。
セッションの固定: 固定を避けるためにsession_regenerate_id()
、認証 (login.php) でのみ使用します
セッション サイドジャッキング: サイト全体の SSL 暗号化。
私は安全ですか?
OWASP A3-Broken Authentication と Session Managementを読んでください。「セッションライディング」と呼ばれることもあるOWASP A5-CSRFについてもお読みください。
このコードは、php ヘッダー ファイルで使用する必要があります。
ini_set('session.cookie_secure',1);
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
session_start();
このコードは、セッション固定を防ぎます。また、セッション ハイジャックdocument.cookie
が発生する可能性のある方法の 1 つであるアクセスから xss を保護するのにも役立ちます。HTTPS のみの Cookie を強制することは、OWASP A9-Insufficient Transport Layer Protectionに対処する良い方法です。HTTPS を使用するこの方法は、「安全な Cookie」と呼ばれることがありますが、これはひどい名前です。また、 STSは非常に優れたセキュリティ機能ですが、すべてのブラウザーが (まだ) サポートしているわけではありません。
また、ユーザー エージェントと IP 情報をセッションに保存し、リクエストごとに確認することもお勧めします。防弾ではありませんが、堅牢性が大幅に向上しています。UA フォージングは非常に簡単ですが、IP フォージングは可能ですが、はるかに困難です...しかし、AOL ユーザーなどのラウンドロビン IP システムの背後にいるユーザーには問題が発生する可能性があります...
私が見つけたベスト プラクティスは、セッション データをデータベースまたはテキスト ファイルに保存することです。データベースにはユーザー エージェントと IP レコードがあり、セッションが他のユーザーによってハイジャックされていないことを確認するためにすべてのリクエストをチェックします。
たとえば、データベースに保存されたセッションは、codeigntier セッション ライブラリで実装を確認できます。私の意見では、この方法は誰かがセッションを乗っ取るのを防ぐためにかなり節約できます。