我不是在问如何隐藏Javascript代码。关于这个话题有很多问题。
我正在建立一个收集用户信息的网站,例如某些按键之间的时间。网络服务器使用它来研究按键。
但是,我认为系统很容易对值进行简单修改。因此,用户可以手动将按键值发送到服务器。
我想过加密,但我的第一个直觉是用户负责浏览器,以便他们可以访问密钥。
有什么办法可以在网络服务器和网页浏览器之间创建一个秘密连接,阻止用户阅读和/或修改发送/接收的数据而服务器无法弄清楚?
答案 0 :(得分:1)
通常,服务器无法确定它接收的请求是否是由应用程序的javascript代码创建的,或者用户是否从开发人员控制台(例如)执行了此操作。
您可以采取一些有创意的解决方案,使恶意用户更难发送与您的应用程序发送的请求完全相同的请求,但这可能会非常棘手。
您是否认为您实际上可能会有大量有兴趣发送恶意请求的用户?如果没有,你可能不需要太担心这个。
限制潜在损害的一种解决方案是过滤掉任何以人类无法输入的速度发送请求的客户端的请求,或者是否以不自然的间隔发送请求。例如。 1连续多分钟每秒请求一秒钟。没有人会这样,所以这些请求可能是恶意的。
答案 1 :(得分:1)
简短的回答是否定的。如果它是一个Web应用程序,用户将始终可以访问所有客户端源代码(甚至是您存储在客户端的任何密钥)。
阻止用户阅读和/或修改收到的数据
您可以隐藏一个用户与其他用户的通信(正如一些评论者指出的那样,例如,使用https),但这并不会隐藏用户与他/她自己的通信。
理论上,你可以使用缩小器来混淆你的JavaScript,使他们更难弄清楚源代码在做什么,但是obscurity is not security。
答案 2 :(得分:1)
您可以设置安全连接并使用基于令牌的验证。所以是的,这是可能的。如果没有,那些使用高度敏感数据并使用Javascript SPA的银行和其他公司将拥有一个小型的"问题。 ;)
话虽如此,我不认为您的申请可以保证这种方法,因为您只想阻止某人弄乱您的统计数据。
我会内置一个简单的验证,可以防止大多数用户搞乱您的系统,并可能会阻止其他用户,因为您的数据根本没有足够的兴趣来投入时间。
只需填写一个密码(如果你想要编码它和/或合并日期以便更改)并将其设置在POST调用的标题中。当您分发您的Javascript代码时,如果没有源代码,您就会缩小和模糊!
如果有正确的密码,服务器端只需检查标题,因此您知道它是由您的代码发送的。
牢不可破的?不......但应该够了。
答案 3 :(得分:1)
如前所述,没有绝对的安全性,但有一些方法可以吓跑许多黑客。
首先,可能没有任何全局变量,因为这些变量很容易修改:
(function() {
"use strict";
// your code goes here
})();
当您向服务器发送请求时,您还应该发送在服务器上验证的时间戳(必须考虑一个小延迟)。
您还应手动加密和解密请求(即使您使用SSL,也可以在浏览器控制台中读取纯文本)。例如,Vignèrechiffre非常强大,并不太难实现。它也不常见,所以黑客可能不会期待它。
最后但并非最不重要的是,您的javascript需要隐藏。这非常重要,因为使用源代码,加密很容易被破坏。
可能最好的方法是使用Google Closure Compiler,然后使用JSF * ck(http://www.jsfuck.com/)来模糊代码。之后,代码只包含以下6个字符:[]()!+
。使用技巧,可以将其转换回来,因此请确保密码被遮盖得很好。
所有这些都非常复杂,但可能有更好的方法:
在服务器端,您可以尝试检测不自然的输入行为(如果输入速度太快或间隔时间不长)。