我有一个使用基于JAAS表单的身份验证的j2ee Web应用程序。但是,由于一些不寻常的要求,我不能让用户直接在logon.jsp表单中输入他们的用户名和密码并让他们提交。相反,我必须在单独的页面上收集数据,然后重定向到logon.jsp以将其登录。
我在想做的是在HTTPSession中存储未加密的用户名/密码。当我准备进行身份验证时,我使用response.redirect路由到logon.jsp。在logon.jsp中,我从会话中取出用户名和密码,填写标准的“j-security-check”表单,然后使用javascript提交表单。
这有多少安全漏洞?我很不舒服地通过浏览器路由请求转到logon.jsp(这就是重定向的作用),因为有人可能会访问会话,因此可以访问未加密的密码。如果我使用HTTPS / SSL,这可能是一种情况吗?它将如何被利用?
我考虑直接在JSP中调用登录servlet而不使用表单,但这似乎不是一个可行的选择,特别是因为我失去了对不同J2EE容器/应用程序服务器的隔离。
任何人都知道如何限制这个安全漏洞?使用forward而不是重定向会更好,因为它不会回到浏览器?
这有多糟糕?
答案 0 :(得分:1)
似乎很容易将这种做法描述为可怕的,但更难以解释为什么它是可怕的,或者在使用SSL的情况下如何利用它? 。我们一直将敏感信息放在HTTPS / SSL手中,我不知道这有什么不同。
最佳做法是避免在不必要时与浏览器进行交互。您必须管理安全性和可用性之间的回报,评估您的应用程序要求和敏感性,并采取相应的行动。
在任何可能的情况下,使用转发而不是重定向会阻止浏览器参与,因为转发是在Web层内部执行的。
答案 1 :(得分:0)
听起来您正在将密码发送回用户,以便用户可以将表单重新提交给真正的login.jsp。这听起来像战场地球对我来说可怕。假设用户在输入用户名后输入密码,密码表格是否可以直接提交给登录处理程序?
答案 2 :(得分:-1)
天啊。密码安全的第一条规则永远不会以明文传输密码。如果您以明文方式将其存储在会话中,这意味着您可能以明文方式将密码从用户发送到服务器(除非您使用的是我强烈建议的SSL)。这意味着任何数据包嗅探器都可以找到密码。至于以明文方式将它们存储在会话中,这意味着你很容易受到会话劫持的攻击。</ p>
换句话说。它是可怕的。不要这样做。