我一直都在考虑这个问题,并且总是在服务器上使用更简单的解决方案。但是,我决定我可以向更多的人询问它,可能是开明之一可以帮助我提供可靠的解决方案。
问题:您正在开发一个为许多用户提供服务的Web应用程序。您提供的部分功能涉及调用外部API。该调用是针对每个用户完成的。可以通过服务器或浏览器的JavaScript进行调用。在任何一种情况下,您都会在服务器数据库中保留处理API调用数据的结果。我想卸载调用API并将结果处理到浏览器的JavaScript,并在完成后将回调服务器并保留数据。我在这种方法中看到的问题是,任何人都可以修改JavaScript的行为(对于firebug及其类似的东西是多么容易)在服务器上保留恶意/不正确的数据。
我怎么能 - 服务器 - 相信从我这里来的数据 - 遵循上一个场景 - 是正确的,不会改变?
答案 0 :(得分:5)
简单的答案是你不能,JavaScript是管道中最不安全的机制 - 最容易操作。如果您希望它是安全的,那么永远不会依赖JavaScript。
从更广泛的意义上考虑它:您只能保护一个至少在某种程度上可以控制的环境......您对浏览器,JavaScript引擎或用户操纵它的 no 控制权
始终始终,始终,始终验证服务器端。
答案 1 :(得分:1)
如果要在服务器A上创建一些数据,将其提供给客户端,并让该客户端逐字地将其传递给服务器B,那么您只需要包含一个反篡改哈希。服务器A和B共享一个他们用作盐的秘密。由于客户端不知道这个盐,因此无法为自己制作真实的数据。
请注意,就其本身而言,此技术仅对服务器A发起数据提供了强烈的信心。您可能需要考虑其他漏洞,例如旧数据的重放攻击等。