0

我有一个页面重定向到另一个页面,但是在重定向中传递了一个参数。在控制器中有一个 url 映射,该映射将 url 与 GET 方法匹配。get 方法接受参数并在显示器上设置值。网址如下所示:

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

但是,用户可以很容易地将参数值从 123 更改为任意值,然后刷新页面。一旦用户输入的recNo有效并且页面被刷新,数据将被显示。我想让用户只能查看通过的 recNo 的记录。我不希望用户能够修改 url 中的参数。

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

4

3 回答 3

6

如果您的请求必须是 GET .. 这意味着它必须是无状态的。它不应该依赖于用户在最后一个请求中所做的事情,这也意味着正确执行 GET 请求所需的所有信息都应该包含在 GET 请求中。

考虑到这一点,在 URL 中传递信息的唯一方法是使其成为 URI 的一部分,或作为 URL 参数。所以要么/app/product/123/app/product?id=123

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

有两种解决方案:

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

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

希望这可以帮助。

于 2013-04-29T12:12:48.930 回答
3

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

于 2013-04-28T03:48:59.793 回答
0

假设:如果不是强制使用“get”方法。

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

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

<form action="hello" method="post">
    <input type="text" name="name" /> <br>
    <input type="submit" title="Submit">
</form>
于 2018-06-16T13:20:39.560 回答