在JAVA / Tomcat网站中保护购物车的最佳方法是什么?

时间:2009-08-28 08:24:52

标签: java security session cookies shopping-cart

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

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

但是,现在我们正在向网站添加“shopping-cart-esque”元素,我们希望确保结帐流程。 到目前为止我的想法是:

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

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

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

    提前致谢!汤姆

1 个答案:

答案 0 :(得分:0)

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

请参阅Oracle Security Guide

由于您使用的是Cookie,因此强制客户端在其浏览器中启用Cookie。

当用户想要使用购物篮然后只在客户端浏览器上存储JSESSION(Container默认)id时,您可以强制用户使用(J2EE安全性)登录(用户不需要按顺序进行身份验证)创建一个会话。)

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

可以在浏览器上禁用Cookie,并让服务器识别客户端。见J2EE Spec