代码之家  ›  专栏  ›  技术社区  ›  user151323

在Java/Tomcat网站中确保购物车的最好方法是什么?

  •  0
  • user151323  · 技术社区  · 17 年前

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

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

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

    1. 依赖一个15分钟到期的安全cookie(它将保存一个长的随机“base64 encoded”字符串作为值)。
    2. 相同的值(和创建时间戳)将保存在会话中(当然是服务器端!)。注意:我指的是常规的、不安全的治疗。
    3. 只有用户验证了自己的身份,才会将cookie发送给用户。如果他已经登录,那么他必须“重新验证”(除非他有一个仍然有效的15分钟安全cookie),并再次给我们他的密码。
    4. 基本上,我想这和一般15分钟的安全“tomcat会话”没有太大区别。此会话中的凭据和数据都通过https/ssl传输。

    注意事项和想法:

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

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

    提前谢谢!汤姆

    1 回复  |  直到 17 年前
        1
  •  0
  •   Koekiebox    17 年前

    我建议实现j2ee安全性。使用struts应该没有问题。

    见 Oracle Security Guide

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

    当用户想要使用篮子时,您可以强制用户使用(j2ee安全性)登录,然后只在客户端浏览器上存储jsession(容器默认)id(用户不需要通过身份验证才能创建会话)。

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

    其中一个可以在浏览器上禁用cookies,但服务器仍然可以识别客户端。见 J2EE Spec