gpt4 book ai didi

java - 在 JSF 中,防止表单篡改的最佳方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:45 25 4
gpt4 key购买 nike

我们正在使用 JSF 1.x,并启用了服务器端状态保存。我们有一个问题,即作为网络机器人实现的恶意用户可以提交一个页面,而无需提交表单中预期的所有字段。这导致一些应该被调用的 validator 没有被调用,等等。

我们希望防止用户能够从表单中添加/删除字段并提交表单(如果他们想提交表单,那么所有预期的字段大部分都在那里)。过去,我使用页面上字段 ID 的 MD5 散列加上一个在页面上保存为隐藏字段的未知短语和一个 session 过滤器来完成此操作,该过滤器在给定提交的字段 ID 的情况下生成预期的散列并将其与它进行比较隐藏字段中的值。

有什么我可以立即使用 JSF 来防止用户操纵表单的事情吗?还是使用第三方库?

最佳答案

在 JSF 1.x 中,如果这些字段是用 required="true" 明确设置的,那么应该已经不可能了。如果您省略它和/或替换为自定义 validator 或改为在 bean 操作方法中进行验证,那么机器人确实能够篡改表单。

因此,要解决此问题,请将 required="true" 显式添加到具有硬服务器端值的必填字段(因此不是例如 required="#{not empty param. foo}" 左右,客户端/机器人可以控制 param.foo)。由于 View 状态存储在服务器端,webbot 无法显示/修改状态。

至少,这是理论。或者它必须是一个非常聪明的网络机器人,或者可能是您的 web 应用程序中使用的 JSF 实现/版本中的(旧?)错误/利用。可以下载最新的 JSF 1.x here .


更新:有关 JSF 2.x 的针对性答案,请前往 Validator skipped when input is removed in client – is this as per JSF specification?简而言之,这在 JSF 2.x 中是可能的,并且这可以(应该)通过放置 bean 验证或 DB 约束来保护。

关于java - 在 JSF 中,防止表单篡改的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2178237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com