PHP安全会话和cookie

PHP安全会话和cookie,php,security,session,cookies,Php,Security,Session,Cookies,我不明白为什么我们要保护cookie和会话,我有一个cookie存储用户ID、用户名和加密密码 我有一个功能,可以随时检查cookies的信息是否与数据库信息匹配,如果不匹配,则重定向到登录页面。 但是,我不了解查看这些信息的风险以及他可以利用这些信息做什么 谁能给我解释一下什么是风险吗?很难用精确的术语来量化。首先,请记住,在每个请求中,cookie都在客户端和服务器之间传输。这对某些人来说可能有很多机会拦截他们。假设有人会在某个时候截取cookie 在cookie中存储用户名、用户ID和(加

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

我有一个功能,可以随时检查cookies的信息是否与数据库信息匹配,如果不匹配,则重定向到登录页面。 但是,我不了解查看这些信息的风险以及他可以利用这些信息做什么


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

很难用精确的术语来量化。首先,请记住,在每个请求中,cookie都在客户端和服务器之间传输。这对某些人来说可能有很多机会拦截他们。假设有人会在某个时候截取cookie

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

  • 泄露可能有用或不可用于邪恶目的的信息;i、 e.要成功登录,您需要用户名和密码,并且您在空中挥舞着这两个用户名,喊着“捕获我”,用户名甚至是明文
  • 完全依赖于密码加密算法的保密性;如果它被知道了,你就有一个相当大的安全问题
    • 由于加密密码是已知的,因此可以对其进行离线暴力攻击,以显示加密算法和明文密码;这种攻击可能纯粹是理论上的,也可能不是理论上的,它存在的事实应该会困扰你
    • 如果有可能解密密码,那么您已经丢失了密码;密码是一个只有用户自己才应该知道的秘密,甚至你在任何时候都不想知道密码是什么;如果你知道密码,你有巨大的责任来保护它,当然你不想一直通过HTTP来回发送它;→ 请参阅密码散列
  • 使您无法控制任何事情,所有登录信息都由客户端负责(即,如果您知道上述任何信息已被泄露,您会怎么做?)
  • 在不使所有活动登录无效的情况下,不允许您更改密码
另一方面,仅使用无意义的会话id:

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

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

首先,如果您的密码是加密的,而不是散列的,那么您的安全性就不如理想的。我明白了,因此,如果有人可以通过一些数据包嗅探器看到存储在cookie中的信息并接管帐户,那么风险就大了。例如,如果我只存储ID,我将在哪里存储密码?正在开会?这是一个小问题,因为当浏览器关闭时,此会话将被删除,当用户返回站点时,如果我只有存储唯一ID的cookie,我如何让他登录?您不需要将密码存储在任何位置!您所需要做的就是创建一个随机(会话)id并将该id链接到用户,仅此而已。使用会话,您只需启动一个会话并保存
$\u会话['userid']=$userid
,就可以知道用户是谁,这就是您所需要的。对于比会话寿命更长的内容,您可以在数据库中存储类似的信息。请注意,会话不必在“浏览器关闭”时结束,您只需要适当地配置cookie和会话超时。