2013-10-16 53 views
-2

我正在开发一个带有JavaScript的系统,我希望它只能在常见的网络浏览器(如IE9,Firefox,Chrome,Safari,Opera等)上运行。如何编写只能在Web浏览器上运行的JavaScript代码?

首先,我使用Closure library + Closure compilerADVANCED_OPTIMIZATION选项压缩了我的代码,生成了一个稍微难以理解的代码。不幸的是,通过使用诸如this之类的工具,代码可以很容易地转换成漂亮的(和可读的)。

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

但主要的问题是,我复杂的代码可能只是通过复制粘贴到非Web浏览器的JavaScript环境,如Rhino + env.jsPhantomJS轻松运行,等等。

请教我可用的技术,让我的代码忽略非Web浏览器环境,如果有的话。

+11

..........为什么? –

+1

为什么你在乎它在哪里运行?它有什么不同? –

+0

你不希望代码能够运行在哪里? –

回答

2

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

如果你不想这个/不能拥有它,那么浏览器不适合你。您可以尝试写一个桌面应用程序或构建一个设备(=受硬件保护的代码),但只会引发反向工程的条形。人们可以从芯片上剥下芯片来了解它们是如何工作的。

从我的经验来看,您可以让“窃取”您宝贵的数据变得有些困难,但您无法阻止它。其他缺点,你应该考虑到:

  • 支付客户将会受到你施加在他们身上的错误和限制的冒犯(海盗只会删除你的版权保护)。
  • 好莱坞花费了数百万美元的DVD CSS和HDMI。两个保护系统都在相对较短的时间内被规避。你打算花多少钱?
  • 也许你的时间和精力花在更好地为顾客提供更好的服务上,所以他们不需要从你那里“偷”。
0

添加到您的脚本的开头:

if(typeof window === 'undefined') 
    throw new Error('This script is meant to run in a web browser'); 

模糊处理它,你认为合适。

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

+0

我想也许你只能看标题。 – user2736012

+0

@ user2736012不,我读了所有的东西。 – Paulpro

+0

窗口对象仍然存在于PhantomJS中,但是PhantomJS又是一个浏览器,所以我不知道这个家伙在做什么...... – jcvandan

3

我并不真正理解这个问题的重点,但是听起来像你担心的是,你不希望人们窃取你作为网站一部分返回的JS。

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

相关问题