在 Javascript 中验证响应来自我的服务器的最佳方法是啥?

Posted

技术标签:

【中文标题】在 Javascript 中验证响应来自我的服务器的最佳方法是啥?【英文标题】:Best way to validate in Javascript that response is from my server(s)?在 Javascript 中验证响应来自我的服务器的最佳方法是什么? 【发布时间】:2016-01-17 16:55:29 【问题描述】:

我有一些值作为 JSON 对象从服务器发送到 JS 客户端。客户端验证响应确实来自我的服务器的最佳方法是什么?我想阻止用户使用客户端连接到不同的服务器。

我知道用户可以更改任何页面的 JS,但我希望查看数千行经过混淆的 JS 比设置虚假响应以将新值传递给客户端要困难得多。验证响应只是额外的安全层。它并不是为了提供完美的安全性,而只是为了防止滥用而增加一层额外的保护。

【问题讨论】:

您的威胁模型是什么?您是要防御中间人攻击更改发送给诚实用户的消息,还是要防御实际用户滥用您的客户? @apsillers 滥用客户端,发送不同的值来操纵应用程序 我编辑了您的问题以包含您在 cmets 中提供的信息。如果您不喜欢它,请随时进一步编辑或回滚。 如果服务器使用该客户端独有的东西(可能是会话令牌?)包含响应的哈希,然后客户端根据预期的哈希验证哈希以确保响应没有被篡改怎么办? @Matt 是的,令牌确实是公开的,但我建议这样做,因为许多服务器端框架都包含基于此类令牌的跨站点请求伪造验证,因此理论上服务器将拥有已经根据服务器的内部会话标识符验证客户端具有正确的令牌。这样,任何其他获得此令牌的人都将不得不劫持用户的会话,这更难做到。 【参考方案1】:

您可以为此使用 SSL。如果您的 JS 客户端验证了服务器 SSL 证书,您将确定响应确实来自您的服务器。

【讨论】:

这不会阻止用户更改代码以从不同的服务器获取答案。它只确认某人愿意为他们到达的任何服务器提供 SSL 证书。

以上是关于在 Javascript 中验证响应来自我的服务器的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何保存来自我的服务器的响应,以及如何访问该数据

将来自 API 的响应作为来自我的节点服务器的响应传递抛出

JSON到JavaScript中的字典?

如何在 android 中解析来自我的中间件的 Directions API 响应?

验证/签署对我的 API 的请求来自我的应用程序并且没有被欺骗(React Native)

验证来自 Javascript 的跨域请求