Spring MVC隐藏了GET上的url参数

时间:2013-04-28 00:48:34

标签: java spring spring-mvc

我有一个页面可以重定向到另一个页面,但是参数在重定向中传递。在Controller中有一个url映射,它使用GET方法匹配url。 get方法获取参数并在显示器上设置值。网址如下所示:

http://localhost:1234/appName/pageName.htm?recNo=123

但是,用户很容易将参数值从123更改为任何值,然后刷新页面。一旦用户输入的recNo有效并刷新页面,将显示数据。我想允许用户只能查看传递的recNo的记录。我不希望用户能够修改网址中的参数。

在Spring MVC中处理此问题的最佳方法是什么?该方法必须是GET aftr页面被重定向。

3 个答案:

答案 0 :(得分:3)

如果您要重定向到同一应用程序中的页面,则可以在会话使用中存储此信息@SessionAtrribute

答案 1 :(得分:3)

如果你的请求必须得到GET,那就意味着它必须是无国籍的。它不应该依赖于用户在上一个请求中所做的事情,这也意味着GET请求正确执行所需的所有信息都应该包含在GET请求中。

考虑到这一点,在URL中传递信息的唯一方法是将其作为URI的一部分,或者作为URL参数。 因此,/app/product/123/app/product?id=123

这会将URL暴露给可能的安全漏洞,用户可以在其中操作URL中的id

有两种解决方案:

  1. 在后端实现一个更强大的系统,以检查GET url中引用的id是否与尝试访问该URL的用户相关/允许。基本上更明确和谨慎地断言您的安全约束。如果您的用户是未经身份验证的用户,则此方法将失败。 (无需登录)。

  2. 第二种解决方案是在网址中公开id的加密和编码版本。您应该使用双向加密。因此,当POST请求完成时,它会对id进行加密和编码,并将其附加到后续的GET请求中。收到GET请求后,您解码并解密url参数以获取真实ID并显示适当的内容。该方法基本上意味着用户很难操纵ecrypted参数,使得它可以被解密以产生有效数字。我经常使用AES加密和Base 64编码。

  3. 希望这有帮助。

答案 2 :(得分:0)

假设:如果不强制使用" get"方法

我认为,您可以使用" post"隐藏URL中的参数。方法,而不是" get"方法

在HTML表单中,您可以添加method =" post" 。以下是示例:

<form action="hello" method="post">
    <input type="text" name="name" /> <br>
    <input type="submit" title="Submit">
</form>