【问题标题】:How to validate remote data in a client?如何验证客户端中的远程数据?
【发布时间】:2012-05-09 17:53:52
【问题描述】:
我正在设计一个客户端-服务器系统,我需要了解如何在客户端发送操作和请求时检查客户端的数据是否正确。在这种特殊情况下,我有一个浏览器和一个 javascript 客户端,它们从 longpolling 中获取数据并更新一系列绑定到 html 元素的对象,几乎是 MVVM。
步骤是这样的:
- 开始轮询
- 获取完整数据
- 将 json 转换为 javascript 对象
- 更新与数据关联的每个 html 对象
用户可以随时触发事件并使用最新更新的本地模型。
- 用户触发事件
- 事件+完整数据(所有对象转换为json)发送
问题是:它非常粗糙,可能很慢,对客户端和服务器来说很重。
我的目标是将数据传输减少到最低限度,并避免客户端损坏/攻击。
我该怎么办?
【问题讨论】:
标签:
javascript
json
model-view-controller
mvvm
client-side
【解决方案1】:
我的目标是将数据传输减少到最低限度
一些尝试:
- 减少发送更新的客户端事件的数量或频率
- 仅发送已更改的数据
- 压缩您发送的数据
- 将多个事件捆绑到一个请求中
并避免客户端损坏/攻击。
- 为避免攻击,您需要验证服务器上的所有输入。您应该在不了解客户的情况下编写您的验证器。你不能假设你能得到什么样的数据组合——相反,你应该假设有人正在使用文本编辑器手工制作请求并使用 CURL 发送它们。
- 为避免损坏(实际上是“丢失的更新”),请将conditional PUTs or POSTs 与
if-none-match 或if-unmodified-since 标头一起使用。
【解决方案2】:
我的目标是将数据传输减少到最低限度
只发送发生变化的数据,但 AJAX 中的最高成本是请求,因此除非您发送大量数据,否则可能不会产生任何明显的差异。
并避免客户端损坏/攻击
不可能。您的代码在浏览器中运行,用户可以为所欲为。