0

我想将敏感的用户信息存储在一个对象中,该对象将作为文件保存在服务器上(而不是在数据库中)。

用户的密码或其他密钥将用于生成加密密钥。

每当用户登录并提供正确的密钥时,将从服务器加载数据对象,然后将其存储在会话中。所有这一切都会发生在其他 SSL 上。

我不熟悉序列化,但我想它会像这样工作。

function loadData($id, $key)
{
    //open file from storage
    $fh = fopen("data/" . $id);
    $obj = fh->read //not sure what the read function would be....
    $obj = decrypt($obj, $key) // some sort of decryption function using openssl_decrpt
    $obj = unserialize($obj
    if ($obj != null) //if successful...
    {
        session_start();
        $_SESSION['data'] = $obj;

        return true;
    }

    return false;
}

function saveData($id, $key)
{
    //open file from storage
    $fh = fopen("data/" . $id);
    $obj = serialize($_SESSION(["data"]);
    $obj = encrypt($obj, $key);
    $obj = serialize($obj

    if ($obj != null) //if successful...
    {
        fh->write($obj) //not sure what the write function would be....

        return true;
    }

    return false;
}

另外,这种方法安全吗?

4

1 回答 1

0

弱点是您的服务器。如果有人可以访问您的服务器,他/她可以:

  1. 对加密对象运行字典攻击(如果密钥是短密码,这可能非常有效)。
  2. 在请求处理期间附加到您的服务器进程并从内存中获取解密的对象(或密钥)。

要缓解第一个问题,您应该使用salt,但对于第二个问题,您确实无能为力 - 只需确保您的服务器没有受到损害......

(请注意,运行字典攻击比逆向工程过程简单得多,并且需要更少的权限。因此,根据您的用例,忽略第二个问题可能是合理的)

于 2013-02-03T15:38:31.410 回答