在之前的一个问题中,我询问了自己的安全层概念中的弱点......它依赖于JavaScript加密函数,并且由于现在的答案,引人注目的一点很清楚,Javascript中所做的一切都可以被操纵而不能值得信赖......
现在的问题是 - 我仍然需要使用它们,即使我依靠SSL进行传输......
所以我想问一下 - 有没有办法让服务器检查网站是否正在使用来自服务器的“正确”javascript?
任何我想到的东西(比如哈希等)都可能显然是伪造的......并且服务器似乎没有任何可能知道在发送一些数据之后客户端发生了什么,通过HTTP标头( - > cookie交换和东西)
答案 0 :(得分:6)
服务器完全无法验证这一点。
Javascript和服务器之间的所有交互都直接来自Javascript 因此,恶意Javascript可以执行您的良好Javascript所能做的任何事情。
通过使用SSL,您可以让恶意Javascript首先进入您的页面变得困难或不可能(只要您信任浏览器及其插件),但一旦它在您的页面中获得立足点,您就会'重新吸收。
基本上,如果攻击者具有对浏览器的物理(或脚本)访问权限,则您无法再信任任何。
答案 1 :(得分:2)
这个问题与javascript没有任何关系。任何服务器应用程序(web或其他)都无法确保客户端计算机上的处理是由已知/可信代码执行的。在Web应用程序中使用javascript会使篡改变得相对微不足道,但如果您分发已编译的代码,则会遇到完全相同的问题。
服务器从客户端接收的所有内容都是数据,并且无法确保它是您发送该数据的预期客户端代码。您可能用于识别预期客户的数据的任何部分都可以由替代客户端轻松创建。
如果您担心的是通过中间人攻击替换客户端代码,那么通过https加载javascript几乎是您最好的选择。但是,没有任何东西可以保护您免受客户机本身上客户端代码的直接替换。
答案 2 :(得分:0)
永远不要假设客户端使用您编写的客户端软件。这是一个不可能解决的问题,你设计的任何解决方案都只会减慢并且不会阻止攻击。
您可能能够对用户进行身份验证,但您永远无法可靠地验证他们正在使用的软件。这样做的必然结果是永远不要信任客户提供的数据。某些攻击,例如跨站点请求伪造(CSRF),要求我们甚至不相信经过身份验证的用户甚至打算提供数据。