当前位置: 首页 > 面试题库 >

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

宋琛
2023-03-14
问题内容

我们正在使用JSF
1.x,并已启用服务器端状态保存。我们有一个问题,一个实施为Web机器人的恶意用户可以提交一个页面,而没有提交期望采用表格形式的所有字段。这导致一些验证器没有被调用,应该被调用,等等。

我们希望防止用户能够从表单中添加/删除字段并提交表单(如果他们想提交表单,则所有期望的字段都在此)。过去,我使用页面上字段ID的MD5哈希值以及另存为页面上隐藏字段的未知短语和会话过滤器来完成此操作,该会话过滤器根据已提交的字段ID生成预期的哈希值,并将其与隐藏字段中的值。

我可以使用JSF开箱即用以防止用户操纵表单吗?还是带有第三方库?


问题答案:

如果使用显式设置了这些字段,则在JSF1.x中应该已经不可能required="true"。如果您忽略此操作和/或由定制的验证程序代替,或者改为在bean操作方法内进行验证,那么漫游器确实可以篡改表单

因此,要解决此问题,请required="true"使用硬服务器端值显式添加到必填字段(因此,例如required="#{not empty param.foo}"在客户机/机器人可以控制的位置则不要这样param.foo)。由于视图状态存储在服务器端,因此网络机器人无法显示/修改状态。

至少,这就是理论。或者它一定是一个非常聪明的Web机器人,或者可能是Web应用程序中使用的JSF impl /
version中的(旧的?)错误/漏洞。最新的JSF 1.x的可下载这里。

更新 :对于以JSF
2.x为目标的答案,当在客户端中删除输入时),跳过了Validator的验证–是否符合JSF规范?简而言之,在JSF 2.x中是可能的,并且可以(应该)通过放置bean验证或DB约束来保护这一点。



 类似资料:
  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我过去曾经做过Java和JSP编程,但是我是Java Server Faces的新手,并且想知道JSF开发是否有一套最佳实践。 问题答案: 一些提示:了解JS

  • 问题内容: 我得到了一种用于创建,读取,更新和删除的表单。我用相同的形式创建了3个组件,但它们传递了不同的道具。我得到了CreateForm.js,ViewForm.js(带有删除按钮的只读)和UpdateForm.js。 我以前使用过PHP,所以我总是以一种形式进行操作。 我使用React和Redux来管理商店。 当我进入CreateForm组件时,我将这些道具传递给子组件,以使其不使用值填充输

  • 问题内容: 我正在HTML / CSS / JS中构建菜单,我需要一种方法来防止双击菜单时突出显示菜单中的文本。我需要一种将多个div的id传递给函数并在其中禁用突出显示的方法。 因此,当用户意外(或有意)双击菜单时,菜单显示其子元素,但其文本不会突出显示。 网络上有很多脚本,但是似乎有些过时了。最好的方法是什么? 问题答案: 在(Mozilla,Firefox,Camino,Safari,Goo

  • 问题内容: 复制列表的最佳方法是什么?我知道以下方法,哪种更好?还是有另一种方法? 问题答案: 如果要浅拷贝(不复制元素),请使用: 如果要进行深层复制,请使用复制模块:

  • 对于我的基于TCP的网络应用程序,我使用基于长度的消息帧传输数据。很简单,一个数据包看起来是这样的: Length是一个Int32,告诉我即将到来的原始数据的长度。 用这个来防止磨炼,有什么好办法呢?我可以实现一个大小限制(例如,每个数据包1MB,任何高于这个值的东西都将丢弃客户机并阻止它),但是有没有更多的“标准”解决方案,不会让人觉得那么讨厌呢?

  • 问题内容: 基本上,我的问题是- 我有一个价格清单,其中一些是历史价格(即,我希望能够搜索到产品X在3月11日价格为0.99美元,在4月1日价格为1.99美元,等等)。存储此信息的最佳方法是什么? 我以为我可能会有一个产品表,该产品表具有一个价格表的外键。最初,我认为存储当前价格可能是最好的选择,但是我想我希望能够存储历史价格数据,所以最好的方法是存储一个类似于以下价格表的表: 我在这里有点茫然。