安全登录和安全页面检查PHP的最佳实践

时间:2014-04-22 07:46:51

标签: php security session cookies encryption

希望得到一些人对以下内容的看法:

  • 在网站上的每个安全页面查询数据库以获取会话/ cookie和数据库值之间的加密和加密代码检查是否是好的/最佳做法?

  • 依靠盐渍和加密的会话和cookie(密钥和值都被加盐和加密)是好的/最佳做法吗?

因此,用户ID和访问级别可以从每个安全页面上的数据库中获取,也可以从加密的会话/ cookie值对中获取。


结论

这就是我选择做的事情:

LOGIN

  1. 验证用户名& md5(密码)在DB中并且是正确的
  2. 开始会话
  3. 会话存储加密密钥&值对:user_id,admin,access_level
  4. 通过加入REMOTE IP&创建一个访问密钥远程用户代理&配置密钥,加密每个密钥,将字符串连接在一起并再次加密
  5. 使用密钥加密
  6. 将此值存储在db和session中
  7. 用户现已登录
  8. 用于页面验证:

    我将选择两个级别的页面用户访问验证:

    1. 低优先级安全任务,例如详细信息列表,上传图像,主要选择查询
    2. 高优先级安全任务,例如删除&更新
    3. 低优先级网页检查:

      1. 只需检查user_id,access_level&的加密会话密钥和值的存在。存在access_key
      2. 高优先级网页检查:

        1. 查询db以获取会话access_key匹配并重新设置user_id,access_level的会话值
        2. 其他

          我将添加一个IP记录功能,该功能将跟踪数据库中的IP以进行登录尝试,如果该登录失败的IP超过10次,则IP将被禁止。

2 个答案:

答案 0 :(得分:2)

当然不是来自cookies。 会话cookie 应该是gobbledygook完全没有意义的伪随机blob。这个gobbledygook是存储在服务器端的会话的id。此会话数据可以存储在数据库或文件系统中(默认情况下,它与PHP会话一起存储)。您使用存储的凭据对用户进行一次身份验证,然后为他打开会话并存储其用户ID以及此会话中您需要的任何其他内容。然后,通过其无意义的会话cookie和属于它的数据来识别和验证用户。不多也不少。

有一个论点是偶尔检查会话中的数据是否仍与数据库同步。比如说,用户具有某些"访问级别"并在用户进行身份验证时将其存储在会话中。现在,您可以更改数据库中用户的访问级别;会话仍然会有该数据的旧副本,用户仍然可以访问他可能不再允许的级别。您可以根据规范数据库存储验证此数据的频率取决于您。

答案 1 :(得分:0)

您可以在Cookie中放置“敏感”数据,它可以被很多系统使用,例如CodeIngnitter。

为了最大限度地降低风险,请确保正确实施加密。

IF 你的加密是否正常,会话cookie加上数据库查找和存储在cookie中的值之间没有太大区别。

在这两种情况下:

如果可能,请使用HTTPS。

仅使用HTTP_ONLY cookie,因此会话cookie不会显示在document.cookie

删除任何可能显示cookie信息的“反射”页面,一个很好的例子就是phpinfo()页面。

请确保将IP地址的某些部分添加到组合中,并且可能是User-Agent。

如果有人设法抓取cookie或会话cookie,它就不能冒充用户,除非它知道用户代理并且可以从该IP或IP类发送HTTP请求。