セッション ID を取得する方法は数多くあります。攻撃者は平文通信を閲覧することでセッション ID を取得できるため、セッション ID を URL に含めたり、暗号化されていない接続を介して送信される Cookie に含めたりすることは危険です ( as _ get() パラメータとしてセッション ID を渡すことも安全ではありません)。URL はブラウザの履歴キャッシュに保存されており、簡単に読み取ることができるためです。 (暗号化通信にはsshの使用を検討してください)
主な安全対策としては以下の2点が挙げられます。
1. 攻撃者がユーザーのセッション ID を取得できないようにします。
セッション ID を取得する方法は数多くあります。攻撃者は平文通信を閲覧することでセッション ID を取得できるため、セッション ID を URL に含めたり、暗号化されていない接続を介して送信される Cookie に含めたりすることは危険です ( as _ get() パラメータとしてセッション ID を渡すことも安全ではありません)。URL はブラウザの履歴キャッシュに保存されており、簡単に読み取ることができるためです。 (暗号化通信にはsshの使用を検討してください)
さらに巧妙な攻撃方法もあります。攻撃者は、スクリプト攻撃によって侵害された Web サイトを通じて、侵害された Web サイトのユーザーを別の Web サイトにリダイレクトし、リダイレクトされた Web サイトの URL に次のコードを挿入します。
?PHPSESSID=213456465412312365465412312;
この攻撃を防ぐには 2 つの方法があります。
(1) phptutorial.iniでsession.use_only_cookieがオンになっているか確認してください。この場合、PHP は URL ベースのセッション ID を拒否します。
(2) セッションを開始するときに、セッション データに変数を入れます。この変数は、セッション データにそのような変数が存在しないことが判明した場合、セッション ID が存在しないことを意味します。 false の場合、session_regenerate_id 関数を呼び出して、既存のセッションに新しいセッション ID を割り当てることができます。
変数が存在するかどうかを判断して、セッション ID が true であるか false であるかを判断します。セッション ID が存在する場合は、session_regenerate_id() 関数を使用してセッション ID を変更し、新しいセッションを作成します。セッションID、
コードは次のとおりです:
コードをコピーします コードは次のとおりです:
攻撃者によるセッションIDの取得を制限する方法は以下の通りです。
(1) 関数 (md5) を使用して、User-Agent ヘッダーと追加の文字列データのハッシュ値 (hash) を計算します。 (ハッシュ関数は、任意の大きなデータセットを受け取り、それを非常に異なる見た目のデータセットに変換します。結果として得られるハッシュ値は完全に再現不可能であり、別の入力から生成することも不可能です)
ユーザー エージェント文字列の後にデータを追加すると、攻撃者は一般的なエージェント値の md5 エンコードを計算してユーザー エージェント文字列をテストできなくなります。
(2) このエンコードされた文字列をユーザーのセッションデータに保存します。
(3) このユーザーからリクエストを受信するたびに、このハッシュ値を確認します。
このソリューションのコードは次のとおりです:
コードをコピーします コードは次のとおりです:
定義 ('ua_seed','webapp') ;
セッション開始() ;
if ( !isset($_SESSION['user_agent'] )){
$_SESSION['user_agent'] = md5 ( $_SERVER['HTTP_USER_AGENT'].ua_seed );
}その他{
if ($_SESSION['user_agent'] != md5($_SERVER['HTTP_USER_AGENT'].ua_seed)){} }
www.bkjia.com本当
攻撃者に迷惑をかけることで、攻撃者がセッションIDを取得しても破壊できなくなり、システムへの被害を軽減できます
http://www.bkjia.com/PHPjc/629702.html
http://www.bkjia.com/PHPjc/629702.html