-1

私はPHPのセッションセキュリティに関するいくつかの情報を見つけるために検索しましたが、いくつかの良いものを見つけましたが、これが一般的な攻撃に対するセッション保護にとって正しく安全であるかどうかはまだわかりません.

    public static function session_start()
    {
        ini_set('session.cookie_httponly', 1);
        ini_set('session.session.use_only_cookies', 1);
        ini_set('session.entropy_file', '/dev/urando');
        ini_set('session.cookie_lifetime', 0);
        ini_set('session.cookie_secure', 1);
        if(session_status() != 2) session_start();

        //fixation security step
        if(!isset($_SESSION[self::$_CHECK_KEY]) || $_SESSION[self::$_CHECK_KEY] !== self::$_CHECK_VAL)
        {
            session_regenerate_id();
            $_SESSION[self::$_CHECK_KEY] = self::$_CHECK_VAL;
        }

        //Hijacking secuity step
        if(isset($_SESSION[self::$_USER_AGENT]))
        {
            if(self::CryptPass(
                    $_SERVER['HTTP_USER_AGENT'], 
                    self::$_USER_SALT,
                    $_SESSION[self::$_USER_AGENT]) 
                !== $_SESSION[self::$_USER_AGENT])
            {
                $this->ReqLogin = true;
            }
        }
        else
        {
            $_SESSION[self::$_USER_AGENT] = self::CryptPass($_SERVER['HTTP_USER_AGENT'], self::$_USER_SALT);
        }
    }

だから知りたいのですが、もっとうまくできることはありますか?やってはいけないことがありますか?

4

1 に答える 1

0

セキュリティはかなり広いトピック領域です。コードが対処していないことがたくさんあり、対処するセキュリティの問題を定義していません。たとえば、これは、共有ホスティング プラットフォーム上の他のユーザーに対してセッションを保護するものではありません。

それはさておき、明らかな問題は、Chrome ブラウザーがセッションの途中で自分自身をアップグレードできることです (つまり、ユーザー エージェントが変更されます)。これは Chrome (および Chromium) ブラウザーでのみ見たことがあり、セッションで複数回発生することはありません。

IP アドレスの変更を追跡することは良い考えですが、これらもセッション中に変更される可能性があります。たとえば、複数のプロキシ間で負荷が分散されます。ただし、ネットワーク プロバイダー (アドレスの whois データ内) がセッション中に変更されることはまれです。これは、たとえば、モバイル デバイスが 3G 接続のみのエリアから Wifi ホットスポットに移動した場合などに発生する可能性があります。

認証状態が変更されたときにセッション ID の変更を強制するための明示的な方法を提供していません。固定/ハイジャックはほとんどの不測の事態をカバーしますが、ここで明示的な変更を行うことをお勧めします。

于 2013-10-09T12:14:13.900 に答える