我正在寻找有关如何保护其他(相对)不安全网站的“购物车”部分的最佳实践解决方案。
站点中的现有设置使用不安全 cookie,并且仅保护(通过 SSL)凭证交易。该站点的其余部分通过 HTTP 访问,因此数据传输不安全。不过,这对我们来说不是问题。
但是,现在我们正在向网站添加“购物车式”元素,我们希望确保结帐过程的安全。到目前为止,我的想法是:
- 依赖具有 15 分钟到期时间的安全 cookie(它将保存一个长的随机“Base64 编码”字符串作为值)。
- 相同的值(和创建时间戳)将保存在 SESSION 中(当然是在服务器端!)。注意:我说的是常规的、不安全的会话。
- 只有在用户进行身份验证后,cookie 才会发送给用户。如果他已经登录 - 他将不得不“重新验证”(除非他有一个仍然有效的 15 分钟安全 cookie)并再次给我们他的密码。
- 基本上,我想这与常规的 15 分钟长的安全“tomcat 会话”并没有太大的不同。此会话中的凭据和数据均通过 HTTPS/SSL 传输。
笔记和想法:
- 为了验证安全 cookie,时间戳和令牌密钥都将存储在服务器上的常规(不安全)会话对象中。但是 - 由于安全令牌仅通过 SSL 传输,因此(理论上)中间人无法拦截它。因此,即使攻击者设法窃取常规会话 ID 并伪造用户身份 -他仍然需要知道与该用户(常规)会话关联的特定安全令牌才能访问他的信用卡详细信息。
- 15 分钟的 cookie 生命周期将在客户端和服务器端强制执行(通过保留创建时间戳)。
- cookie 本身(和安全令牌)不包含任何机密(加密或其他)信息。密钥只是一个很长的随机字符串。
- 为了生成令牌,我想到了使用 java 的 SecureRandom,并对它生成的随机字节进行 Base64 编码,以便它只包含字母数字、“斜线”和“加号”字符。我想使用 512 个随机字节,但如果可以用更少的字节来完成,我会很高兴听到 :)
这被认为是一个好的解决方案吗?在这种情况下是否有更好的做法可以应用?有什么办法可以在不“过度”的情况下进一步提高安全性?
提前致谢!汤姆