Security 如何在HTTPSession中使用未加密的密码重定向到logon.jsp?

Security 如何在HTTPSession中使用未加密的密码重定向到logon.jsp?,security,authentication,jsp,session,jakarta-ee,Security,Authentication,Jsp,Session,Jakarta Ee,我有一个j2ee web应用程序,它使用JAAS基于表单的身份验证。但是,由于一些不寻常的要求,我不能让用户直接在logon.jsp表单中输入用户名和密码并让他们提交。相反,我必须在单独的页面上收集数据,然后稍后重定向到logon.jsp以登录它们 我想做的是在HTTPSession中存储未加密的用户名/密码。当我准备好进行身份验证时,我使用response.redirect路由到logon.jsp。在logon.jsp中,我将用户名和密码从会话中取出,填充标准的“j-security-chec

我有一个j2ee web应用程序,它使用JAAS基于表单的身份验证。但是,由于一些不寻常的要求,我不能让用户直接在logon.jsp表单中输入用户名和密码并让他们提交。相反,我必须在单独的页面上收集数据,然后稍后重定向到logon.jsp以登录它们

我想做的是在HTTPSession中存储未加密的用户名/密码。当我准备好进行身份验证时,我使用response.redirect路由到logon.jsp。在logon.jsp中,我将用户名和密码从会话中取出,填充标准的“j-security-check”表单,然后使用javascript提交表单

这有多大的安全漏洞?我不喜欢通过浏览器将请求发送到logon.jsp(重定向就是这样做的),因为有人可能会访问会话,从而获得未加密的密码。如果我使用的是HTTPS/SSL,这是一种可能的情况吗?它将如何被利用

我研究了直接在JSP中调用登录servlet而不使用表单,但这似乎不是一个可行的选择,特别是因为我失去了与不同J2EE容器/应用程序服务器的隔离

有人知道我该如何限制这个安全漏洞吗?使用forward而不是redirect会更好吗,因为它不会返回到浏览器


这有多糟糕?

听起来好像您正在将密码发送回用户,以便用户可以将表单重新提交到real login.jsp。这听起来很可怕。假设用户在输入用户名后输入密码,密码表单是否可以不直接提交给登录处理程序?

哦,上帝。密码安全的第一条规则是永远不要以明文形式传输密码。如果您将密码以明文形式存储在会话中,这意味着您可能将密码以明文形式从用户发送到服务器(除非您使用SSL,我强烈建议您使用SSL)。这意味着任何数据包嗅探器都可以找到密码。至于将它们以明文形式存储在会话中,这意味着您很容易被会话劫持


换句话说。这是可怕的。不要这样做。

似乎很容易将这种做法描述为可怕,但要解释它为什么可怕,或者在使用SSL的情况下如何利用它要困难得多。我们一直将敏感信息放在HTTPS/SSL的手中,我看不出这有什么不同

最佳实践是避免在不必要时与浏览器交互。您必须管理安全性和可用性之间的收益,评估应用程序需求和敏感性,并相应地采取行动


在任何情况下,使用转发而不是重定向将阻止浏览器参与,因为转发是在web层内部执行的。

感谢您的回复。“用户”没有重新提交表单,因为他们没有单击submit,但是javascript会在我用会话中的值填充logon.jsp表单后自动提交该表单。所以浏览器正在这样做。这就是你的意思吗?密码表单无法直接提交给登录处理程序,这正是我的问题所在。您强烈谴责这种方法。你能描述一下攻击者会采取哪些步骤来利用它吗?在会话中以明文形式存储密码并不意味着没有使用SSL。这是一个毫无根据的假设。说得好,我忘了问。但是,它们仍然容易被会话劫持。我更新了我的答案以反映您的评论。我将使用SSL,密码将在发送到服务器之前在web层中加密,并在数据库中加密(用salt单向加密)。只有在我必须路由到logon.jsp时,它才是纯文本的(它必须以纯文本提交,好吧,如果,尽管有SSL,这就像你想的那样可怕,在重定向时加密它是我唯一的选择,但这将导致真正的头痛)。如果im使用SSL,会话中使用明文密码的response.redirect有多糟糕?如何利用这一点?