有没有办法隐藏 struts.xml
中的 param
值,因为当我将它们从一个操作传递到另一个操作时,它们在 URL 上可见?
<action name="BackToManagerIndex" class="Action.LoginAction" method="ManagerList">
<result type="redirectAction">
<param name="actionName">login</param>
<param name="namespace">../Manager</param>
<param name="User_Id">%{User_Id} </param>
<param name="Password">%{Password}</param>
</result>
这里,当 BackToManagerIndex
操作完成时,我将其重定向到另一个名为 login
的操作,该操作位于命名空间管理器中,具有 2 个属性:User_Id
和密码
。
一切都很好,但是这两个属性的值在 URL 上可见,如下所示
http://localhost:8084/MEMS/Manager/login.action?User_Id=abc%40gmail.com&Password=1234
有什么方法可以隐藏这些值或者可以将 URL 设置为
http://localhost:8084/MEMS/Manager/login.action
?
(我仍然应该在其他操作中获取值)
最佳答案
您永远不应该携带这样的密码,事实上您甚至不应该将其存储在 session 中。甚至在数据库中也没有。
您应该对其进行散列并将散列存储在数据库中,然后当用户输入密码登录时,您对插入的密码进行散列并将其与数据库中的散列进行比较。
这样,即使是您,系统和数据库管理员,也不知道用户的密码。
然后黑客会尝试使用彩虹表,即散列密码字典,为了防止这种情况,您需要在散列中添加一些盐。
阅读更多内容:
除了密码讨论之外,如果您想要重定向以避免网址中的参数出于用户体验原因(并且不是出于安全原因),除了将它们放入 session 中之外,您还可以
run a script in the landing page that make use of HTML5 History API:
<script>
// BEFORE:
// http://localhost:8084/MEMS/Manager/login.action?User_Id=abc%40gmail.com&Password=1234
window.history.pushState("","",window.location.pathname);
// LATER:
// http://localhost:8084/MEMS/Manager/login.action
</script>
关于java - 在 Struts 2 中隐藏 struts.xml 值的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30730639/