6

セッションハイジャックを防ぐ方法を見つけようとしています。これが私がやろうと思っていたことです:

ユーザーIDセッションに加えて、ユーザーエージェントとユーザーIPセッションも追加します。ページが読み込まれるたびに、これらのセッションが一致するかどうかが確認されます。これで十分でしょうか。例えば:

<?php

$userIp = $_SESSION['userIp'];
$userAgent = $_SESSION['userAgent'];

if ($userIp != $_SERVER['REMOTE_ADDR'] || $userAgent != $_SERVER['HTTP_USER_AGENT'] {
    session_destroy();
}

?>

ありがとう。

4

2 に答える 2

12

それよりもはるかに複雑です。あなたのサイト/サービスは、さまざまな設定を持つさまざまな人々によってアクセスされます。最初に問題が発生する可能性があるのは、誰かがプロキシサーバーを経由している場合です。アプリに表示されるIPは変更される可能性があり、有効なユーザーであってもセッションは損益分岐点になります。

どうしてもIPで何かをする必要がある場合、誤検知をあまり多く発生させずにできることのほとんどは、発信元の国/地域を確認することです。カナダからのログインとインドからのログインを検出した場合は、問題が発生している可能性があります。それでも、それは絶対確実ではありません。

ユーザーエージェントも簡単に偽造できます。誰かのを取得できればPHPSESSIONID、間違いなくそのユーザーエージェントも取得できます。ここではあまり達成されていません。

誰かのセッションを保護する最善の方法は、認証されたすべてのものをHTTPSの背後に置き、セッションCookieがHTTPSのみであることを確認することです。

編集:セッションの背後で保護しているデータが非常に機密性が高く、ユーザーがそれを認識する必要がある場合は、ユーザーのためにログインしている他のセッションをいつでも表示できます。たとえば、GMailでも同じことが行われます。

于 2012-05-29T18:04:37.683 に答える
1

z42に同意します

また、アプローチを提案したいと思います。ユーザーがサイトに正常にログインするたびに、SALTを生成してセッションとデータベースに保存し、ユーザーが既にログインしているかどうかを確認するための条件を作成できます。複数のユーザーが同じアカウントで複数回ログオンし、ユーザーがログオフしたときにdbからSALTを破棄することを防ぐことはできません。

于 2012-05-29T18:17:19.053 に答える