想了解一些人对以下内容的看法:
- 查询网站上每个安全页面的数据库,以便在会话/cookie和数据库值之间进行盐水和加密代码检查,这是一种好的/最佳的做法吗
或
- 依赖加盐和加密的会话和cookie(其中密钥和值都是加盐和加加密的)是好的/最佳做法吗
因此,用户id和访问级别要么从每个安全页面的数据库中提取,要么从加密的会话/cookie值对中提取。
结论
这就是我选择做的:
登录
- 验证用户名&md5(密码)在数据库中并且是正确的
- 启动会话
- 会话存储加密密钥&值对:user_id、admin、access_level
- 通过加入REMOTE IP&远程用户代理&配置加密密钥,对每个加密,将字符串连接在一起,然后再次加密
- 使用加密的密钥将此值存储在数据库和会话中
- 用户现在已登录
对于页面验证:
我将选择两个级别的页面用户访问验证:
- 低优先级安全任务,例如详细列出列表、上传图像、主要选择查询
- 高优先级安全任务,例如删除&更新
低优先级页面检查:
- 只需检查加密会话密钥和user_id、access_level&access_key的存在
高优先级页面检查:
- 查询数据库中的会话access_key匹配,并重新设置user_id、access_level的会话值
附加:
我将添加一个IP记录功能,它将跟踪数据库中的IP登录尝试,如果该IP登录失败超过10次,该IP将被禁止。
当然不是来自cookie。会话cookie应该是一个完全没有意义的官样文章的伪随机斑点。这个官样文章是存储在服务器端的会话的id。这个会话数据可以存储在数据库或文件系统中(PHP会话默认情况下是这样)。您使用用户存储的凭据对其进行一次身份验证,然后为他打开一个会话,并在该会话中存储他的用户id和您需要的任何其他内容。然后,用户通过其无意义的会话cookie和属于它的数据进行识别和身份验证。
不过,偶尔检查会话中的数据是否仍与数据库同步是有争议的。例如,用户具有特定的"访问级别",当用户进行身份验证时,您将其存储在会话中。现在您可以更改用户在数据库中的访问级别;会话仍将具有该数据的旧副本,并且用户仍将能够访问他可能不再被允许访问的级别。根据规范数据库存储验证这些数据的频率由您决定。
您可以将"敏感"数据放在cookie中,它被许多系统使用,例如CodeIngnitter。
为了最大限度地降低风险,请确保您的加密货币得到正确实施。
如果您的加密货币正常,那么会话cookie加上数据库查找和cookie中存储的值之间没有太大区别。
在这两种情况下:
如果可能,请使用HTTPS。
仅使用HTTP_only cookie,因此会话cookie不会显示在document.cookie 中
删除任何可能显示cookie信息的"反射"页面,phpinfo()页面就是一个很好的例子。
请确保将IP地址的某些部分添加到混合中,也许还会添加用户代理。
如果有人设法获取了cookie或会话cookie,它就不能模拟用户,除非它知道用户代理,并且可以从该IP或IP类发送HTTP请求。