0

我正在寻找有关如何保护其他(相对)不安全网站的“购物车”部分的最佳实践解决方案。

站点中的现有设置使用不安全 cookie,并且仅保护(通过 SSL)凭证交易。该站点的其余部分通过 HTTP 访问,因此数据传输不安全。不过,这对我们来说不是问题。

但是,现在我们正在向网站添加“购物车式”元素,我们希望确保结帐过程的安全。到目前为止,我的想法是:

  1. 依赖具有 15 分钟到期时间的安全 cookie(它将保存一个长的随机“Base64 编码”字符串作为值)。
  2. 相同的值(和创建时间戳)将保存在 SESSION 中(当然是在服务器端!)。注意:我说的是常规的、不安全的会话。
  3. 只有在用户进行身份验证后,cookie 才会发送给用户。如果他已经登录 - 他将不得不“重新验证”(除非他有一个仍然有效的 15 分钟安全 cookie)并再次给我们他的密码。
  4. 基本上,我想这与常规的 15 分钟长的安全“tomcat 会话”并没有太大的不同。此会话中的凭据和数据均通过 HTTPS/SSL 传输。

笔记和想法:

  • 为了验证安全 cookie,时间戳和令牌密钥都将存储在服务器上的常规(不安全)会话对象中。但是 - 由于安全令牌仅通过 SSL 传输,因此(理论上)中间人无法拦截它。因此,即使攻击者设法窃取常规会话 ID 并伪造用户身份 -他仍然需要知道与该用户(常规)会话关联的特定安全令牌才能访问他的信用卡详细信息。
  • 15 分钟的 cookie 生命周期将在客户端和服务器端强制执行(通过保留创建时间戳)。
  • cookie 本身(和安全令牌)不包含任何机密(加密或其他)信息。密钥只是一个很长的随机字符串。
  • 为了生成令牌,我想到了使用 java 的 SecureRandom,并对它生成的随机字节进行 Base64 编码,以便它只包含字母数字、“斜线”和“加号”字符。我想使用 512 个随机字节,但如果可以用更少的字节来完成,我会很高兴听到 :)

这被认为是一个好的解决方案吗?在这种情况下是否有更好的做法可以应用?有什么办法可以在不“过度”的情况下进一步提高安全性?

提前致谢!汤姆

4

1 回答 1

0

我建议实施 J2EE 安全性。使用 Struts 应该没有问题。

请参阅Oracle 安全指南

因为您正在使用 Cookie,所以您会强制客户端在其浏览器上启用 Cookie。

您可以在用户想要使用购物篮时强制用户使用(J2EE 安全性)登录,然后仅在客户端浏览器上存储 JSESSION(容器默认)ID(用户无需进行身份验证即可创建会议)。

如果您提供 30 分钟的会话超时并将所有客户端信息保留在会话中,则它将保留在服务器上,并在客户端消失时处理掉。

一种是能够在浏览器上禁用 Cookie,但仍然让服务器识别客户端。请参阅J2EE 规范

于 2009-08-31T18:05:10.440 回答