繁体   English   中英

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

[英]Secure login and security page check best practices with PHP

想获得一些人对以下方面的看法:

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

要么

  • 依赖于盐渍和加密的会话和cookie(密钥和值都被加盐和加密)是好的/最佳实践吗?

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


结论

这就是我选择做的事情:

登录

  1. 验证用户名&md5(密码)在DB中并且是正确的
  2. 开始一个会话
  3. 会话存储加密的键和值对:user_id,admin,access_level
  4. 通过加入REMOTE IP&REMOTE USER AGENT&Config encription key创建一个ACCESS KEY,加密每个密钥,将字符串连接在一起并再次加密
  5. 将此值存储在db和session中,加密密钥
  6. 用户现在已登录

用于页面验证:

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

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

低优先级页面检查:

  1. 只需检查加密会话密钥的存在以及user_id,access_level和access_key是否存在的值

高优先级页面检查:

  1. 查询db for session access_key匹配并重新设置user_id,access_level的会话值

额外:

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

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

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

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

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

如果您的加密是正常的,那么会话cookie加上db查找和存储在cookie中的值之间没有太大区别。

在这两种情况下:

如果可能,请使用HTTPS。

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

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

确保将IP地址的某些部分添加到组合中,也可以添加用户代理。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM