【问题标题】:PHP secure session and cookiesPHP 安全会话和 cookie
【发布时间】:2014-06-17 05:02:19
【问题描述】:

我不明白为什么我们必须保护 cookie 和会话,我有一个存储用户 ID、用户名加密密码的 cookie。

如果信息与数据库信息匹配,我有一个随时检查 cookie 的功能,如果不匹配,则重定向到登录页面。 但是我不明白可以查看此信息的风险以及他可以使用此信息做什么。

谁能给我解释一下什么是风险?

【问题讨论】:

  • 首先,如果您的密码已加密且未经过哈希处理,那么您的安全性将不如理想。

标签: php security session cookies


【解决方案1】:

很难准确量化。首先,请记住,在每个请求中都会在客户端和服务器之间传输 cookie。这可能是很多人拦截他们的机会。假设 cookie 会在某个时候被某人截获。

在 cookie 中存储用户名、用户 ID 和(加密的)密码:

  • 泄露可能有用或无用或可用于邪恶目的的信息;即,要成功登录,您需要用户名和密码,并且您在空中挥舞着高喊CAPTURE ME,用户名即使是明文形式
  • 完全依赖于您的密码加密算法的保密性;如果它被知道,你有一个相当大的安全问题
    • 由于已知加密密码,可以对其进行离线暴力攻击,以泄露加密算法和明文密码;这种攻击可能是纯理论的,也可能不是纯理论的,它存在的事实应该困扰你
    • 如果有可能解密密码,你已经输了;密码是一个秘密,只有用户自己应该知道,甚至您在任何时候都不想知道密码是什么;如果您确实知道密码,那么您就有很大的责任保护它,当然您不想一直通过 HTTP 来回发送它; → 见密码散列
  • 让您无法控制任何事情,所有登录信息都由客户端掌握(即如果您知道上述任何内容已被泄露,您会怎么做?
  • 不允许您在不使所有活动登录无效的情况下更改密码

另一方面,只使用无意义的会话 id:

  • 在 cookie 中没有显示任何有用信息
  • 没有机会破解或暴力破解任何有价值的东西
  • 服务器拥有最终权力,因为会话可以随时撤销
  • 更简单(更简单的安全性总是好的)
  • 使用具有服务器端状态的完整会话可以提升权限;例如要求用户在当前 IP 的最后 x 分钟内使用他的密码主动登录,以允许他更改他的密码或电子邮件地址 → 即使会话 cookie 应该被劫持也提供安全性李>

简而言之:会话 ID 根本没有攻击面,因为它们本质上是没有意义的。用户 ID、名称和密码是一个非常有趣的目标。仅从这些基本点来看,会议似乎更具吸引力。假设一个完美的实现具有完美的安全性,两者都应该是相当安全的。然而,你不知道你有什么不安全感,你不会拥有完美的安全感。假设这一点,知道这一点,具有较少警告的更简单的系统应该总是更可取的。

【讨论】:

  • 我明白了,所以如果有人可以通过一些数据包嗅探器看到存储在 cookie 中的信息并接管帐户,则存在风险。例如,如果我只存储 ID,我将在哪里存储密码?在会话中?这是一个小问题,因为当浏览器关闭时,这个会话将被删除,当用户返回站点时,如果我只有 cookie 只存储 ID,我怎样才能让他保持登录状态?
  • 您无需将密码存储在任何地方!您需要做的就是创建一个随机(会话)ID 并将该 ID 链接到用户,仅此而已。使用会话,您只需启动会话并保存$_SESSION['userid'] = $userid 即可知道用户是谁,这就是您所需要的。对于比会话寿命更长的东西,您可以将类似的信息存储在数据库中。请注意,会话不必在“浏览器关闭时”结束,您只需适当配置 cookie 和会话超时。
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 2011-12-03
  • 2012-04-12
相关资源
最近更新 更多