Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写只能在web浏览器上运行的JavaScript代码?_Javascript_Security - Fatal编程技术网

如何编写只能在web浏览器上运行的JavaScript代码?

如何编写只能在web浏览器上运行的JavaScript代码?,javascript,security,Javascript,Security,我正在用JavaScript开发一个系统,我想让它只在普通的web浏览器(如IE9、Firefox、Chrome、Safari、Opera等)上工作 首先,我使用+和ADVANCED_OPTIMIZATION选项对代码进行了压缩,生成了一个看起来有点难以理解的代码。不幸的是,这些代码可以很容易地通过使用像这样的工具转换成漂亮(可读)的东西 其次,我选择了易于阅读但难以理解的算法。例如,对于那些以前从未开发过此类算法的人来说,解码里德-所罗门码的脚本可能很难理解。当然,这个解决方案并不完美,因为那

我正在用JavaScript开发一个系统,我想让它只在普通的web浏览器(如IE9、Firefox、Chrome、Safari、Opera等)上工作

首先,我使用+和
ADVANCED_OPTIMIZATION
选项对代码进行了压缩,生成了一个看起来有点难以理解的代码。不幸的是,这些代码可以很容易地通过使用像这样的工具转换成漂亮(可读)的东西

其次,我选择了易于阅读但难以理解的算法。例如,对于那些以前从未开发过此类算法的人来说,解码里德-所罗门码的脚本可能很难理解。当然,这个解决方案并不完美,因为那些对Reed-Solomon代码有深入了解的人可能会知道里面写了什么,即使代码是压缩的,没有注释

但主要的问题是,我的复杂代码只需将粘贴复制到非Web浏览器javaScript环境(如+、等)即可轻松运行


请教我如何让代码忽略非web浏览器环境(如果有的话)。

在脚本开头添加以下内容:

if(typeof window === 'undefined')
  throw new Error('This script is meant to run in a web browser');
按你认为合适的方式混淆它


如果您这样做是出于安全目的,那么这是毫无意义的。用户可以读取和修改在用户浏览器上运行的Javascript中所做的一切。不仅如此,对他们来说这样做很容易。您不希望用户看到的任何数据都不应发送到他们的浏览器。所有的处理都应该在服务器端完成。

我不太明白这个问题的重点,但听起来你担心的是,你不希望别人窃取你作为网站一部分返回的JS


如果是这样的话,只有一个真正的解决方案:在服务器上工作。

你可以让代码很难运行,但最终,它是你提供给世界的源代码。任何类型的混淆和加密都必须在浏览器执行之前进行反转,这意味着任何人最终都可以对代码进行反向工程

如果你不想要/不能拥有它,那么浏览器就不是适合你的工具。您可以尝试编写桌面应用程序或构建设备(=受硬件保护的代码),但这只会提高反向工程的门槛。人们确实会磨掉芯片的外壳来了解它们是如何工作的

根据我的经验,你可以让“窃取”你有价值的数据变得有些困难,但你无法阻止它。您应该考虑的其他不利因素:

  • 付费客户会被你强加给他们的错误和限制所冒犯(盗版者只会删除你的拷贝保护)
  • 好莱坞在DVD CSS和HDMI上花费了数百万美元。这两个保护系统都在相对较短的时间内被绕过。你打算花多少钱
  • 也许你的时间和精力会花在为客户提供更好的服务上,这样他们就不会觉得有必要“偷”你的东西了

。。。。。。。。。。为什么?你到底为什么在乎它在哪里运行?这有什么区别?你具体不希望代码在哪里运行?@IzumiKawashima:如果你在寻找数据的安全性,那么浏览器中就没有这种安全性。看看,窗口对象仍将存在于PhantomJS中,但PhantomJS是一个浏览器,所以我不知道这家伙是什么意思。。。