dev*_*dar 0 java spring spring-mvc
我有一个页面可以重定向到另一个页面,但是在重定向中传递了一个参数。在控制器中有一个 url 映射,它使用 GET 方法匹配 url。get 方法接受参数并在显示器上设置值。网址如下所示:
http://localhost:1234/appName/pageName.htm?recNo=123
Run Code Online (Sandbox Code Playgroud)
但是,用户很容易将参数值从 123 更改为任何值,然后刷新页面。一旦用户输入的 recNo 有效并且页面被刷新,数据将被显示。我想让用户只能查看传递的 recNo 的记录。我不希望用户能够修改 url 中的参数。
在 Spring MVC 中处理这个问题的最佳方法是什么?该方法必须是页面重定向后的 GET。
如果您的请求必须是 GET .. 这意味着它必须是无状态的。它不应该依赖于用户在上次请求中做了什么,这也意味着正确执行 GET 请求所需的所有信息都应该包含在 GET 请求中。
考虑到这一点,在 URL 中传递信息的唯一方法是将其作为 URI 的一部分,或作为 URL 参数。因此,无论/app/product/123或/app/product?id=123
这将 URL 暴露给可能的安全漏洞,用户可以在其中操作 url 中的 id,
有两种解决方案:
在后端实现一个更强大的系统,以检查 GET url 中引用的 id 是否关联/允许尝试访问 URL 的用户。基本上要更加明确和深思熟虑地断言您的安全约束。如果您的用户是未经身份验证的用户,则此方法将失败。(无需登录)。
第二种解决方案是在 url 中公开 id 的加密和编码版本。不过,您应该使用双向加密。因此,当 POST 请求完成时,它会对 id 进行加密和编码,并将其附加到后续的 GET 请求中。当收到 GET 请求时,您解码和解密 url 参数以获取真实 id 并显示适当的内容。这种方法基本上意味着用户很难操纵加密参数以使其可以被解密以产生有效数字。我经常使用 AES 加密和 Base 64 编码。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
13139 次 |
| 最近记录: |