如何在客户端中验证远程数据
How to validate remote data in a client?
我正在设计一个客户端-服务器系统,我需要了解如何在客户端发送操作和请求时检查它们的数据是否正确。在这种特殊情况下,我有一个浏览器和一个javascript客户端,它从longpolling获取数据并更新一系列对象,这些对象绑定到html元素,几乎是MVVM。
步骤如下所示:
- 开始轮询
- 获取完整数据
- 将 JSON 转换为 JavaScript 对象
- 更新与数据关联的每个 HTML 对象
用户可以随时触发事件,并使用最新更新的本地模型。
- 用户触发事件
- 发送事件 + 完整数据(所有对象转换为 JSON)
问题是:它非常粗糙,可能很慢,对客户端和服务器来说很重。
我的目标是将数据传输减少到最低限度,并避免客户端损坏/攻击。我应该怎么做?
我的目标是将数据传输减少到最低限度
仅发送已更改的数据,但 AJAX 中最高的成本是请求,因此除非您发送大量数据,否则可能不会产生任何明显的差异。
并避免客户端损坏/攻击
不可能的。您的代码在浏览器中运行,用户可以做任何他们想做的事情。
我的目标是将数据传输减少到最低限度
可以尝试的一些方法:
- 减少发送更新的客户端事件的数量或频率
- 仅发送已更改的数据
- 压缩您发送的数据
- 将多个事件捆绑到单个请求中
并避免客户端损坏/攻击。
- 为避免攻击,您需要验证服务器上的所有输入。你应该在不知道客户端的情况下编写验证器。你不能假设你可以得到什么数据组合 - 相反,你应该假设有人正在使用文本编辑器手工制作请求并使用CURL发送它们。
- 为避免损坏(实际上是"丢失的更新"),请将条件 PAT 或 POST 与
if-none-match
或if-unmodified-since
标头一起使用。
相关文章:
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 在VanillaJS中模拟模型双向数据绑定
- CSS-如何定位内容数据标题
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- Highcharts系列.数据数据类型限制
- 在jQuery mobile/java脚本的TextBoxes中动态添加未加载的数据.数据具有[object HTMLI
- 严格模式下的图像数据数据分配
- 具有持久数据(数据存储)的Chrome扩展程序
- Java客户端卡在来自nodejs服务器的数据数据流中
- 在gmail线程中从ZIP文件中提取CSV,并将数据写入谷歌表单
- Javascript -定期向服务器发送用户位置数据(多线程)
- 高级javascript源数据-数据表
- 在WebWorker和主线程之间传递二进制数据的最佳实践是什么?
- 在 HTML (SVG) 元素中包含数据/数据密钥
- 在HTML5应用程序中下载后台数据到浏览器数据库- settimeout vs工作线程
- JavaScript 是单线程的吗?如果没有,如何同步访问共享数据