【问题标题】:Trustable communication between your server and the browser?您的服务器和浏览器之间的可靠通信?
【发布时间】:2010-12-08 09:52:51
【问题描述】:

我一直在考虑这个问题,并且总是选择在服务器上解决问题的更简单的解决方案。但是,我决定我可以问更多的人,可能是一个开明的人可以帮助我提供一个可靠的解决方案。

问题:您正在开发一个为许多用户提供服务的 Web 应用程序。您提供的部分功能涉及调用外部 API。该调用是为每个用户完成的。调用可以由您的服务器或浏览器的 JavaScript 进行。在任何一种情况下,您都会将处理来自 API 调用的数据的结果保存在服务器的数据库中。我想卸载调用 API 并将结果处理到浏览器的 JavaScript,完成后它将回调服务器并保存数据。我看到这种方法的问题是,任何人都可以修改 JavaScript 的行为(thnx 到 firebug 及其类似的东西是多么容易)以在服务器上保留恶意/不正确的数据。

我如何 - 服务器 - 相信来自 JavaScript 的数据 - 按照前面的场景 - 是正确的并且没有被改变?

【问题讨论】:

    标签: javascript ajax api web-applications


    【解决方案1】:

    简单的答案是你不能,JavaScript 是管道中最不安全的机制 - 最容易操作。如果你希望它是安全的,你应该永远依赖 JavaScript。

    从更一般的意义上考虑:您只能保护您至少可以控制的环境...您无法控制浏览器、JavaScript 引擎或操作它的用户.

    总是验证服务器端,总是,总是,总是。

    【讨论】:

    • 我确定你提到“从不依赖 JavaScript”!?
    • @aefxx - 我的意思是“做一些安全的事情”......澄清:)
    • aefxx 指出您的错字:“如果您希望它安全,您应该永远依赖 JavaScript。”
    【解决方案2】:

    如果您想在服务器 A 上创建一些数据,将其提供给客户端,并让该客户端将其逐字传递给服务器 B,那么您只需要在其中包含一个防篡改哈希即可。服务器 A 和 B 共享一个秘密,他们将其用作盐。由于客户端不知道这个盐,它无法为自己伪造真实的数据。

    请注意,就其本身而言,这种技术只能提供服务器 A 源自数据的高度可信度。您可能还需要考虑其他漏洞,例如对旧数据的重放攻击等。

    【讨论】:

    • 如果我理解正确,服务器 A 和服务器 B 将始终必须包含防篡改哈希,而 javascript 只是转发消息的中间人?...问题是,这都是 abt您如何创建防篡改哈希...因为我假设 javascript 将获得 API 调用的一些结果...处理它,然后转发结果...如果不涉及 javascript 处理,您的解决方案是完美的中间... javascript 只是充当转发器... 我喜欢那个解决方案
    • 没错。如果您让客户端转换数据,那么您必须在数据被污染并且可能是恶意的假设下进行操作。几乎是尼克·克拉弗在另一个答案中所断言的。
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    相关资源
    最近更新 更多