0

是否有理由用数据库中的值填充会话属性?

1

$_SESSION['hash']  = query_row['hash']; //hash from database; unique to each user

然后在每个页面上,检查会话是否存在

if(isset($_SESSION['hash'])) && $db->checkLogin()
{
//user session is still valid
}

借此:

function checkLogin($session_hash)
{
if($_SESSION['hash']) 
{
 //check if $session_hash is found in database
}
    }

而不是使用

2

$_SESSION['islogged_in']  = true;

并且只检查是否设置了会话

if(isset($_SESSION['islogged_in']))
{
//user session is still valid
}

使用第一种方法是否可以为您提供更多保护?用独特的东西而不是“真”来设置会话值是否明智?使用数据库数据验证 $_SESSION[] 值是否明智?为什么会更安全?

编辑:我知道哪些是保护会话免受固定和劫持的标准方法。这不是我的问题:)

我根本找不到使用方法1的理由(因此使用数据库进行验证,甚至使用用户名等唯一数据设置会话属性,..)据我所知,会话属性被保存在服务器端,因此用户/黑客不能修改它们。会话保护(劫持和固定)仅保护会话 id,因为这是唯一保存在 cookie 中的客户端(因此可以修改)。无论如何,我在互联网上看到很多程序员都这样做,所以这就是我问的原因。

4

2 回答 2

0

我认为你最好使用方法 2。会话只能由服务器设置,所以如果设置了,你就知道你的用户已经过验证。第一种方法每次都不必要地再次检查数据库,并且不再安全。这些方法都不能防止会话劫持

如果要防止会话劫持,还可以将用户的 IP 存储在会话中,并每次检查以确保它没有更改。这是一种相当简单易行的检查方法。如果您想要其他更强大的替代方案,我建议您查看此页面

于 2012-11-16T22:19:37.570 回答
0

如果您不想知道用户的任何信息,除非他已成功登录,则没有理由存储 id 并检查 id 是否存在(或类似的东西)。你和你一个人可以写信给会话。如果您的服务器被黑客入侵(例如:有些可以将代码或会话上传到您的服务器),那么您遇到的问题比检查会话数据(您写入会话的数据)是否有效要多得多:)

于 2012-11-16T23:46:40.763 回答