【问题标题】:Is it secure to store a random value as session "key" in a table?将随机值作为会话“密钥”存储在表中是否安全?
【发布时间】:2012-10-12 23:05:21
【问题描述】:

我是第一次使用用户帐户构建网站。我正在使用户登录安全。在注册时,我在保存密码之前对密码进行哈希处理,然后在登录时如果密码正确,我会使用 setCookie 保存一个带有用户信息的 cookie。

现在劫持帐户就像修改 cookie 值一样简单。我想让网站安全,但我正在阅读的大多数选项似乎太复杂了,我想使用我自己可以做的事情。我已经阅读了一些教程,并且对如何操作有一个基本的了解,但不知道它有多安全。

我的想法是为会话创建一个表并存储用户 ID + 一个随机值,同时保存一个 cookie 并检查每个页面都将这两个值加载到表中,如果它们正确则更新它们。这看起来很简单,即使用户从不同的地方登录也可以工作,但我不知道它有多安全。 cookie 是可见的,但我看不到任何劫持会话的方式,除非有人偷走了 cookie 并在更新之前使用它。

这安全吗?我还可以使用什么其他简单的方法?

【问题讨论】:

  • 如果有人偷了你的数据库那种的访问权限,那么无论哪种方式你都搞砸了。只需将 cookie 存储在数据库中并确保您的数据库是安全的。
  • @pst,真的吗?它似乎违反了“使用一次”的定义。
  • @ElYobo 我最初将“如果它们正确就更新它们”作为值的再生。

标签: php mysql


【解决方案1】:

为什么不将用户名存储在会话变量中?客户端存储一个随机 ID 并将其呈现给服务器。然后服务器将其与用户名(服务器在本地拥有)匹配。 只有服务器可以看到用户名。 编码也很容易,PHP 会创建随机 ID 并为您提供给客户端。此外,如果用户将 ID 更改为其他内容,他们几乎不可能偶然发现另一个已存在且正在被其他登录用户使用的 ID。

session_start();

//setting the username after they log in
$_SESSION['username'] = $username;

//retrieving the username
//this will work from any file as long as they are on the same server for the same domain
$username = $_SESSION['username'];

【讨论】:

  • 直到最近我还在使用它。我不知道它是安全的。问题是很难让它与使用相同源的许多域一起工作,我以前的站点就是这种情况,所以我切换到 setcookie()。这真的安全吗?如果有人复制 cookie 会发生什么?
  • 我的意思是随机ID容易获取吗?无论如何,我不想让它防弹只是相对安全。除非出现其他问题,否则我可能会选择这个。
  • @Liso22 是的,这非常安全。我想强调的是,只有服务器知道用户名。客户端有一个随机 ID,当呈现给服务器时,服务器会将其与用户名匹配。另外,是的,随机 ID 很容易访问。确实没有办法阻止某人复制和使用 ID。您需要一种跟踪用户的方法,并且当您向客户提供任何信息时,您应该完全期望它会被用户查看。也许您一次只能允许一个 IP 地址使用 cookie。
  • 使用会话是绝对安全的。多个域有什么问题?带有会话 ID 的 cookie 只会发送到一个域(除非您不遗余力地解决这个问题)。
  • 太好了,谢谢你们提供的信息。关于多个域,问题是我使用了两个不同的域,而 SESSION 根本不起作用,所以我不得不直接使用 COOKIES。我无法让 SESSION 跨域工作。
猜你喜欢
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 2012-08-05
  • 2010-12-10
  • 2015-05-15
  • 2018-02-19
相关资源
最近更新 更多