有哪些方法可以使客户端更难操作 DOM
What are some ways to make it harder for the client to manipulate the DOM?
我将使用 Ajax 处理来自客户端的大量表单数据。现在,我验证输入的方法是向需要检查的每个窗体控件添加一个"validate"类。当用户输入信息(或提交表单)时,脚本会查看具有该类的每个控件的输入,并在移动到下一个选项卡(或将其发送到服务器)之前验证其内容。当然,问题是用户可以轻松删除类,并且不会查看该项目。
虽然我当然会在服务器端验证输入(客户端数据永远不能被信任!),但许多用户端内容生成[新输入,动态表单,删除/添加验证类等]取决于人们不修补类。虽然我知道客户最终可以做任何他们想做的事情,但有哪些方法可以让客户难以操纵这个过程?
到目前为止,我已经考虑过:
- 在页面加载开始时运行一个脚本,该脚本使用"validate"类获取所有HTML输入并将它们存储在变量中。当用户提交数据或移动到下一个选项卡时,我不是使用类"validate"查看元素,而是查看与变量内容相比验证数据。
- 向每个输入添加数据验证 HTML 属性并执行与上述相同的操作(运行脚本并在客户端有时间修改设置之前获取需要验证的输入)
还有什么可以做的吗?我对使用上述方法有点犹豫,因为可能需要在列表中添加/删除新的动态生成的表单元素;这+在页面加载开始时抓取数据可能会导致一些不必要的开销。
"虽然我知道客户最终可以做任何他们想做的事情......"
你刚刚回答了你的问题。如果这是你的起点,你为什么要让它变得更难?值得我花时间实际尝试入侵您的网站吗?如果是,我不在乎它更难。还有,能有多难?你是否要让弄清楚JavaScript变得如此困难,以至于下一个查看此代码的开发人员也无法弄清楚发生了什么?
此外,您还将添加更多代码。你有没有写过没有错误的代码?我没有。所以,可以保证,这件事会有错误。因此,如果百万分之一的用户可能会尝试做坏事,您最终会阻止许多合法用户在使用网站时出现错误。
客户端检查只是为了对最终用户友好,给他们即时反馈。时期。
可能不是你喜欢的答案,但它就是答案。 :)
编辑:最后一条评论。假设你确实让它变得非常困难。那你会不做服务器端检查吗?你会对你的老板说,"哦,我们让客户端的黑客攻击变得非常困难。他们仍然可以。我们只是让它变得困难。因此,无需进行服务器端检查。当然不是。因此,如果您无论如何都要进行服务器端检查,则不会从尝试在客户端进行混淆中获得任何好处。
- 如何从JavaScript中的HTML字符串中操作DOM
- 使用jQuery.resize()操作DOM
- AngularJS在HTML渲染后使用JQuery操作DOM
- 使用 jQuery 操作 DOM 对象
- 如何使用温泉UI操作DOM
- 在 html 页面上,javascript 是以编程方式操作 DOM 的唯一方法吗?
- 继续加载.gif在操作 DOM 时进行动画处理
- 无法在 AJAX 成功函数中操作 DOM
- 在jQuery的XML文档中选择和操作DOM中的元素
- 有哪些方法可以使客户端更难操作 DOM
- 在JS操作DOM并传递请求标头后获取生成的HTML
- JQuery Mobile:操作DOM后的访问ID
- 使用 jQuery 操作 DOM 时,代码不同步
- 如何在运行perl机械化脚本时操作DOM元素
- 使用 JavaScript 或 jquery 操作 DOM 元素
- 在Javascript中操作DOM的简单方法
- JavaScript:不操作DOM的动态脚本加载
- 在单击提交后操作DOM,其中请求需要一段时间
- 在React+Redux.js应用程序中,在Provider组件之外操作DOM元素的正确方法是什么
- 如何在Dynamics CRM中使用jQuery操作DOM