我正在使用HTMl,CSS和JavaScript编写一个强大,可扩展且相当复杂的网站引擎。我不希望它被扯掉,我想知道是否有任何方法可以保护源不被客户端查看。
我特别关注JavaScript,我想知道我是否可以通过将其托管在无法直接查看的单独文件中来保护它。我可以完全控制我的网络服务器,我可以改变任何设置以适应。
答案 0 :(得分:36)
无论您如何对代码进行模糊处理,任何人都可以通过查看代码来复制您正在执行的操作。从头开始编写它可能需要更长的时间,但是你无法做到这一点。
您唯一真正的保护选择涉及对代码进行版权保护,并可能提交专利。如果您正在做的事情真的与众不同,那么专利可能是最好的方式。
通常,您的应用程序中的值实际上将位于支持区域中。换句话说,如果人们觉得你会在足够长的时间内支持它,人们就会购买它。当你定价时要注意这一点。
你会发现会有一些只会窃取你的代码并重用它。不要太担心他们,因为他们无论如何都不会付钱给客户。相反,让您自己的客户轻松购买和使用您的东西。确保你提供支持;这就是真正价值的来源。
答案 1 :(得分:32)
恰恰相反,使用MIT / GPL许可证将您的代码作为opensource发布。将您的(商家)名称附加到代码中,并称为第一个创建应用程序X.声誉让您远远超过“保护您的代码”的徒劳尝试。
保护您的代码确实没有理由关注JS / CSS / HTML,您可以做的最好的事情是通过将其保留在后端来保护您的业务逻辑。
Prime示例,我可以编写自己的CKEditor实现(很多人都这样做)但是使用CKEditor会更容易,每个人都知道它是什么,是谁编写的。
或者以谷歌地图为例,周围有很多克隆,但只有一个真正的谷歌地图。哎呀,其他人在谷歌之前编写了一个地图实现,但谷歌地图更为人所知。
我可以继续提供大量示例,为什么试图保护您的代码不仅愚蠢,而且实际上并不聪明......保护业务逻辑是一回事,但实际上您还有更多收获通过花哨的smancy前端代码公开...
答案 2 :(得分:18)
不,你不能那样做。
一切都要进入浏览器(客户端)。你可能会混淆uglify,缩小或使用它,但最后它很容易再次“加密”。
您也无法隐藏它,因为您希望浏览器接收所有来源。所以,即使你做了一些时髦的举动,比如“加载动态脚本标签插入的javascript,然后删除脚本标签”。嗯,这可能适用于一些没有经验的用户,但使用像Fiddler
这样的工具将再次显示真相。
答案 3 :(得分:11)
你根本做不到。使用最小化器模糊你的javascript和CSS可能是你能得到的最接近的。
答案 4 :(得分:8)
嗯,流行的答案是“不要把它放在网上”。但是,你可以对你的javascript进行模糊处理,通常情况下,没有人会费心去窃取它。删除函数和变量名等等有很长的路要走。通常,从头开始会更容易。
答案 5 :(得分:5)
您既不能将其放在互联网上,也不能只通过内联网访问它;但是没有办法可靠地阻止客户端访问html / css / JS,而不会阻止它们访问网站本身。
混淆将阻止偶然尝试和好奇心浏览,但不会阻止确定的攻击者/浏览器,因为它全部在客户端实现。
答案 6 :(得分:5)
缩小HTML,CSS和JavaScript会有所帮助,但人们总是可以重新格式化。您最好的选择是发送给客户的内容与您正在使用的原始内容不同。
可以通过以下方式实现:
然而,所有这些,只有到目前为止,你可以去。编译你的JavaScript将使你更难以遵循你的原始意图,但如果有人下定决心进行逆向工程,可能就不够困难了。
答案 7 :(得分:3)
您可以使用JavaScript混淆器。它会使代码难以阅读。他们仍然可以“撕掉它”,但要理解它并因此修改它将非常困难。你无法完全隐藏代码。
答案 8 :(得分:2)
我经常考虑这个问题,坦率地说,没有太多可以做的事情。我遇到的最好的是使用JS编译器。
理论上,我从来没有真正做到这一点,但我知道它是可能的,它可能通过1x1像素swf加载你的js,而sws又是通过加扰器发送的。它仍然可以绕过它,但它变得远更烦人。然后,您将能够将aes加密代码发送到swf,解密客户端(使用as3crypt库),然后将其写入浏览器。也就是说,除非你使用swf进行一系列回调,否则你仍然会遇到这样一个问题:它仍然需要写入浏览器。 Firebug和其他浏览器的js控制台将让用户获得“已编译”的js。当然,可以编写脚本AS3来注册一系列回调...
正如我所说,这是假设而非假设,虽然我毫不怀疑它可以在田园诗般的情况下工作,但Flash是有限的,你需要AS3的知识。当然,这样做的好处是,这是一种将js移植到浏览器而无需用户轻松阅读的方法。
答案 9 :(得分:1)
我真的不相信可以隐藏最终用户的JavaScript代码,JavaScript是客户端而不是服务器端,这意味着更好的是以纯文本方式查看源代码或让第三方程序拦截浏览器,最终用户,需要代码才能完成任务。
即使它是加密的,在某个时间点它也必须是未加密的,以便浏览器完成并显示最终用户将获得代码的任务,除非您完全和完全控制最终用户的计算机隐藏任何在客户端执行的代码是不可能的。