私はphpでセッションを保護する方法を読みましたが、いくつかありますが、ユーザーエージェント、IP、およびポートをセッションに追加して両方を暗号化するほど効果的ではありません。セッションハイジャックを防ぐ良い方法は何ですか? 私は次のステップを踏むことを考えました:
- PHPSESSIDキーをidのような一般的なものに完全に変更します
- ページごとにトークンを生成してページに配置し、セッションと同様に検証します。これにより、検証のためにセッションのみに依存することが減ります。
- 短いセッションの有効期限を追加します。
- セッション ID にさらに変数を追加して暗号化すると、セッション ID が長くなり、解読が難しくなります。おそらく、RSA暗号化を使用するでしょう。
- ユーザーがセッションを終了できるように、ログアウト ボタンを配置します。
- JavaScript を使用して時間をカウントします。5 分を超えると、ユーザーにセッションを続行するよう警告します。
- セッションを Cookie のみに保存します。
私が聞いた問題点は次のとおりです。ページごとにトークンを使用する場合、戻るボタンを無効にする必要がありますか? 何故ですか?
他にもいくつか不明な点がありますか?セッションをデータベースに保存する方が安全ですか? なぜ?SSL を使用するとどの程度安全になりますか? セッションIDを非常に迅速に再生成することはどうですか?
暗号化キーの総当たり攻撃を防ぐシステムはどれですか (セッション ID を推測する大量の試行でサーバーをフラッディングしようとするユーザーの IP を特定することは役に立ちますか?)
セッションの再生成はどのように機能しますか?古いセッション キーは自動的に破棄されますか?ハッカーが古いセッション キーを取得した場合、それは引き続き機能しますか? 侵入テスターになる方法を学んでいるので、セッションのセキュリティを理解することは重要ですか?
更新 私はこれを行うことを考えました:キーを使用したセッションIDの対称暗号化キーを使用してポストフィールドにあるランダムに生成されたトークンの対称暗号化
ランダムに生成されたトークンもセッション ID に追加され、暗号化されます。
リクエストに応じて、これらの変数を取得する必要があります: $_SESSION['PHPSESSID'] (ランダムに生成されたトークンが暗号化されています) $_POST['RandomlyGeneratedToken']
キー A でセッション ID を復号化し、キー B でランダムにトークンを復号化します。次の 2 つのチェックを行います。 -トークンが最初に送信されたリクエストのトークンと同じかどうかをチェックします。-トークンがセッション ID に存在するかどうかを確認します。
ハッカーの可能性: - セッション ID を強引に攻撃する。私のセッションIDは十分に長いので、彼には時間がかかります. 異なるセッションIDを持つ同じIPからの大量のリクエストフローを検出し、スリープ機能で彼を遅くするシステムを採用することができました.
- トラフィックを傍受し、ユーザーからセッション ID とトークンを取得し、それらを送信しようとします。うーん...リクエストごとにセッションIDを再生成し、特定のページでセッションをすぐに期限切れにする必要があります..1分かもしれません..しかし、彼はどのくらいの速さで盗聴できますか?