在 Struts 2 中隐藏 struts.xml 值的参数
Hiding param of struts.xml values in Struts 2
有什么方法可以隐藏 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
和 Password
.
一切都很好,但两个属性的值在 URL 上都可见,如
http://localhost:8084/MEMS/Manager/login.action?User_Id=abc%40gmail.com&Password=1234
有什么方法可以隐藏这些值,或者可以将 URL 设置为
http://localhost:8084/MEMS/Manager/login.action
?
(我仍然应该在其他操作中获取值)
redirectAction
结果类型中包含的参数反映在 URL 中。要从 URL 中删除它们,您需要从结果配置中删除它们。
<action name="BackToManagerIndex" class="Action.LoginAction" method="ManagerList">
<result type="redirectAction">
<param name="actionName">login</param>
<param name="namespace">/Manager</param>
</result>
</action>
重定向后的另一个操作应该从会话中获取参数。
你永远不应该携带这样的密码,事实上你甚至不应该将它存储在会话中。甚至不在数据库中。
您应该对其进行散列并将散列存储在数据库中,然后当用户输入密码登录时,您对插入的密码进行散列并将其与数据库中的散列进行对比。
这样,即使是您,系统管理员和数据库管理员,也不知道用户的密码。
然后黑客将尝试使用彩虹表、散列密码字典,为了防止这种情况,您将在散列中添加一些盐。
阅读更多内容:
- Struts2: how to store safety username and password from action to action
- Update object properties
密码讨论另当别论,如果要重定向避开url中的参数对于用户经验原因( 不是出于安全原因),除了将它们放在会话中,您还可以
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>
有什么方法可以隐藏 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
和 Password
.
一切都很好,但两个属性的值在 URL 上都可见,如
http://localhost:8084/MEMS/Manager/login.action?User_Id=abc%40gmail.com&Password=1234
有什么方法可以隐藏这些值,或者可以将 URL 设置为
http://localhost:8084/MEMS/Manager/login.action
?
(我仍然应该在其他操作中获取值)
redirectAction
结果类型中包含的参数反映在 URL 中。要从 URL 中删除它们,您需要从结果配置中删除它们。
<action name="BackToManagerIndex" class="Action.LoginAction" method="ManagerList">
<result type="redirectAction">
<param name="actionName">login</param>
<param name="namespace">/Manager</param>
</result>
</action>
重定向后的另一个操作应该从会话中获取参数。
你永远不应该携带这样的密码,事实上你甚至不应该将它存储在会话中。甚至不在数据库中。
您应该对其进行散列并将散列存储在数据库中,然后当用户输入密码登录时,您对插入的密码进行散列并将其与数据库中的散列进行对比。
这样,即使是您,系统管理员和数据库管理员,也不知道用户的密码。
然后黑客将尝试使用彩虹表、散列密码字典,为了防止这种情况,您将在散列中添加一些盐。
阅读更多内容:
- Struts2: how to store safety username and password from action to action
- Update object properties
密码讨论另当别论,如果要重定向避开url中的参数对于用户经验原因( 不是出于安全原因),除了将它们放在会话中,您还可以
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>