PHP安全会话检查?
我有我给具有匹配密码存储的密码,是一个简单的登录系统的用户=会话:PHP安全会话检查?
// Checks Password and Username
if ($pSys->checkPassword($AccountData['password'], $StoredData['password'])) {
$_SESSION['login'] = true;
}
的问题是:这是足够安全?
// put this on every header page that needs to be loggedin.
function loginCheck(){
if (empty($_SESSION['login'])) {
header('location:index.php');
die();
}
}
有die()
和exit()
之间的差异?其次,有人说我应该加session_regenerate_id()
? (这是一种矫枉过正?)无论如何,真正的问题在上面说过。
插件*
我已阅读PHP Session Security但似乎并不在这里与我的问题(该链接只是一般)。
这里是checkPassword()
方法
function checkPassword($password, $storedpassword) {
if($password == $storedpassword){
return true;
}
}
-
empty
是检查一个变量不存在,或具有等于一个值假(另请参阅此type comparison table)。 -
die
是exit
的别名,用于通过可选消息立即中止当前脚本的执行。
我们您的验证例如:是的,你应该使用session_regenerate_id
生成一个新的会话ID,并通过session_regenerate_id
设置可选参数设置为true撤销旧的会话ID:
if (!sizeof($ErrorAccount)) { // Checks Password and Username
session_regenerate_id(true);
$_SESSION['login'] = true;
}
的目的session_regenerate_id
是为了避免session fixation攻击。如果服务器仅允许通过cookie发送会话ID,则这不是必需的,但由于默认情况下PHP允许使用URL,因此强烈建议重新生成该ID。
我的意思是死亡和退出,我只是编辑它,谢谢秋葵,你总是很好的回答问题,所以使用session_regenerate_id确实生效,然后..嗯,这就够了吗? – 2010-07-26 18:11:05
请解释'session_regenerate_id'的必要性这对于答案会非常有用。 – 2010-07-26 18:11:05
那么logincheck函数怎么样才好呢?不需要添加东西? – 2010-07-26 18:13:17
由于您正在寻找有关安全性的答案,因此也请勿将存储的密码保存为纯文本。至少,盐和散列你的密码,然后存储散列。重新哈希和比较散列,而不是纯文本。
您可以向表单添加一个标记(哈希),然后验证该标记以确保通过表单提交的标记仍然有效。这有助于防止CSRF攻击。
您也可以将IP地址和浏览器连同令牌一起存储在数据库中以进行额外的验证,但是您需要了解某些ISP经常更改客户端IP地址并可能导致验证失败。
'是有模()之间空一diffrence()?''比较模具()'和'空()'没有意义。也就是说,“死”等同于“出口”; – 2010-07-26 18:07:13
对不起,我的意思是退出:) ive编辑一个乔治,谢谢。 – 2010-07-26 18:08:06
我想的很多。如果您检查死亡的文档,您会注意到它指向退出。 http://php.net/manual/en/function.die。php – 2010-07-26 18:09:33