有哪些方法可以使客户端更难操作 DOM

What are some ways to make it harder for the client to manipulate the DOM?

本文关键字:操作 DOM 客户端 可以使 方法      更新时间:2023-09-26

我将使用 Ajax 处理来自客户端的大量表单数据。现在,我验证输入的方法是向需要检查的每个窗体控件添加一个"validate"类。当用户输入信息(或提交表单)时,脚本会查看具有该类的每个控件的输入,并在移动到下一个选项卡(或将其发送到服务器)之前验证其内容。当然,问题是用户可以轻松删除类,并且不会查看该项目。

虽然我当然会在服务器端验证输入(客户端数据永远不能被信任!),但许多用户端内容生成[新输入,动态表单,删除/添加验证类等]取决于人们不修补类。虽然我知道客户最终可以做任何他们想做的事情,但有哪些方法可以让客户难以操纵这个过程?

到目前为止,我已经考虑过:

  • 在页面加载开始时运行一个脚本,该脚本使用"validate"类获取所有HTML输入并将它们存储在变量中。当用户提交数据或移动到下一个选项卡时,我不是使用类"validate"查看元素,而是查看与变量内容相比验证数据。
  • 向每个输入添加数据验证 HTML 属性并执行与上述相同的操作(运行脚本并在客户端有时间修改设置之前获取需要验证的输入)

还有什么可以做的吗?我对使用上述方法有点犹豫,因为可能需要在列表中添加/删除新的动态生成的表单元素;这+在页面加载开始时抓取数据可能会导致一些不必要的开销。

"虽然我知道客户最终可以做任何他们想做的事情......"

你刚刚回答了你的问题。如果这是你的起点,你为什么要让它变得更难?值得我花时间实际尝试入侵您的网站吗?如果是,我不在乎它更难。还有,能有多难?你是否要让弄清楚JavaScript变得如此困难,以至于下一个查看此代码的开发人员也无法弄清楚发生了什么?

此外,您还将添加更多代码。你有没有写过没有错误的代码?我没有。所以,可以保证,这件事会有错误。因此,如果百万分之一的用户可能会尝试做坏事,您最终会阻止许多合法用户在使用网站时出现错误。

客户端检查只是为了对最终用户友好,给他们即时反馈。时期。

可能不是你喜欢的答案,但它就是答案。 :)

编辑:最后一条评论。假设你确实让它变得非常困难。那你会做服务器端检查吗?你会对你的老板说,"哦,我们让客户端的黑客攻击变得非常困难。他们仍然可以。我们只是让它变得困难。因此,无需进行服务器端检查。当然不是。因此,如果您无论如何都要进行服务器端检查,则不会从尝试在客户端进行混淆中获得任何好处。