【问题标题】:Is it possible to retrieve data saved in a php session? (Security issue)是否可以检索保存在 php 会话中的数据? (安全问题)
【发布时间】:2016-07-05 14:49:36
【问题描述】:

为了尊重用户的隐私,我需要用一个只有他们自己知道的密钥来加密每个用户的信息。 服务器和任何可以访问服务器或数据库的人都不应该被信任

因此,我将使用每个用户的密码来加密他/她的安全关键数据。这就是我需要在会话处于活动状态时存储密码的原因,以便加密和解密他们的信息。

问题是:如果我将密码保存在会话中,对服务器具有完全访问权限的攻击者是否有可能从会话中检索存储的密码?

【问题讨论】:

  • 那么,你想把密码保存在服务器上却又说服务器不可信,那为什么还要把密码保存在服务器上呢?矛盾矛盾...
  • 为了实现这一点,您需要在客户端计算机上加密/解密数据,而不是服务器。但是你不能使用 JS,就好像你不能信任服务器你不能信任服务器来提供正确的 JS。你真的能做到吗?你能相信客户的电脑吗……?
  • 如果您尝试通过密码盐加密数据,那么只有密码才能解密数据。由于数据被打乱,您将无法对数据进行任何处理,或者如果您从实际用户中抽象出内容,则至少用户表数据会。但问题是......如果知道服务器不可信,用户可能根本不相信服务器实际上正在加密数据。
  • 密码不应该是可检索的。散列它们并在需要检索时将它们重置。
  • 我不再喜欢 md5,但我通常会做一个 dbl 哈希。一次在客户端,一次在服务器上。这样,网络上的数据不是纯文本,但同时,以防万一用户设法通过 javascript 禁用散列客户端,至少额外的散列使其在服务器中保持安全..

标签: php security session privacy


【解决方案1】:

你的问题没有多大意义。

我需要使用只有他们自己知道的密钥来加密每个用户的信息。

你说的是端到端加密

我需要在会话处于活动状态时存储密码

你知道用户的密码!

您应该决定是否要使用端到端加密(他们的密钥永远不会离开用户的计算机)。

对服务器具有完全访问权限的攻击者是否可以从会话中检索存储的密码?

是的

【讨论】:

  • 这与端到端加密无关。所有加密都在服务器端完成。我不保存用户的密码,所以我不知道(我使用哈希密码)密码以纯文本形式存储的唯一位置是在会话中
  • @SorooshGhaffari 好吧,如果Server and anyone who can access the server or database are not supposed to be trusted
【解决方案2】:

简短回答:是的,对服务器具有完全访问权限的攻击者可以从临时会话文件中检索密码。

这是一个简单的示例,我们将会话文件放在我们的 php 文件旁边,然后读取其内容。

<?php

session_save_path('./');
session_start();

$_SESSION['password'] = 'xc4qh8wzza1xmx6vhf0nfuzluigqxlj';

echo file_get_contents('./sess_' . session_id());

?>

结果是

密码|s:31:"xc4qh8wzza1xmx6vhf0nfuzluigqxlj";

如您所见,数据以纯文本形式存储,易于阅读。

【讨论】:

    猜你喜欢
    • 2012-06-25
    • 2011-03-15
    • 2017-11-29
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2011-09-13
    相关资源
    最近更新 更多