我正在为网站构建一个管理面板,我已经编写了我的身份验证代码,但我不确定它有多安全。
这不是登录脚本,但会使用登录脚本设置的一些会话变量。
无论如何,在这里,希望你能为我检查一下(:
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);
}
答案 0 :(得分:0)
看起来很完美,但它需要https来防止数据包嗅探以获得完整的“安全”
至于Adder关于其IP的前两个子网的想法,如果数据非常敏感,您可以考虑做一个基本的geo2ip以进一步验证。
答案 1 :(得分:0)
看起来很不错。但是用户代理和IP很容易被欺骗,因此在签名方面将所有内容都留给了盐。我推荐一种相当大的盐。正如其他人所指出的那样,必须使用HTTPS - 然后你还需要确保使用的证书没有受到损害(显然far too easy)。