3

我正在为网站构建一个管理面板,我已经编写了身份验证代码,但我不确定它有多安全。

这不是登录脚本,但它会利用登录脚本设置的一些会话变量。

无论如何,就在这里,希望你能帮我检查一下(:

if (isset($_SESSION['logged_in'])) {    
//Prevent hijacking of the session
    $recreatesignature = $_SESSION['signature']; //signature (old)
    $recreatessalt = $_SESSION['salt']; //session salt (old)
    $useragent = $_SERVER['HTTP_USER_AGENT']; //useragent (new)
    $ip = $_SERVER['REMOTE_ADDR']; //ip (new)

    $signature = $salt.sha1($ip.$recreatessalt.$useragent); //signature (hash)

    //Compare signatures
    if (!($recreatesignature==$signature)) {
        header(sprintf("Location: %s", $domain));   
        exit();
    }

//Session timeout
    if ((isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] >     $sessiontimeout)))  {
        //destroy session
        session_destroy();   
        session_unset();  
        //redirect to home page
        header(sprintf("Location: %s", $domain));
    }
    $_SESSION['LAST_ACTIVITY'] = time(); 

//Generate new session id to make hijacking harder
    session_regenerate_id(TRUE);
}
4

2 回答 2

0

看起来还不错。但是用户代理和 IP 很容易被欺骗,所以就签名而言,一切都只剩下盐了。我会推荐一个相当大的盐。正如其他人所指出的那样,必须使用 HTTPS - 然后您还需要确保所使用的证书没有被泄露(这显然太容易了)。

于 2013-01-15T13:45:03.740 回答
0

看起来很完美,但它需要 https 来防止数据包嗅探以实现完全“安全”

至于 Adder 对其 IP 的前两个子网的想法,如果数据高度敏感,您可以考虑做一个基本的 geo2ip 以进一步验证。

于 2013-01-15T12:30:39.077 回答