我知道隐藏源代码是不可能的可能的?

例如,要链接网站的脚本,我们使用:

<script type="text/javascript" src="http://somedomain.com/scriptxyz.js">
</script>

现在,可以隐藏脚本来自的用户,还是隐藏脚本内容并仍在网页上使用它?

例如,通过将其保存在我需要密码来访问文件的私有CDN中,该工作是否有效?如果没有,什么可以用来获得我想要的东西?

有帮助吗?

解决方案

一个简单答案的好问题: 你不能!

JavaScript是一种客户端编程语言,因此它可以在客户端的计算机上工作,因此您实际上无法对客户端隐藏任何内容。
混淆您的代码是一个很好的解决方案,但这还不够,因为尽管很难,但有人可以破译您的代码并“窃取”您的脚本。
有几种方法可以使您的代码难以被盗,但是正如我所说的那样,没有什么防弹。

在我的头顶上,一个想法是限制您嵌入代码外的页面外部对外部JS文件的访问。在这种情况下,如果您有

<script type="text/javascript" src="myJs.js"></script>

有人试图访问 myjs.js 在浏览器中文件,不应授予他对脚本源的任何访问权限。
例如,如果您的页面用PHP编写,则可以通过 include 功能并让脚本决定是否是 安全的“返回它的来源。
在此示例中,您需要外部“ JS”(用PHP编写)文件 myjs.php :

<?php
    $URL = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    if ($URL != "my-domain.com/my-page.php")
    die("/\*sry, no acces rights\*/");
?>
// your obfuscated script goes here

这将包含在您的主页中 my-page.php :

<script type="text/javascript">
    <?php include "myJs.php"; ?>;
</script> 

这样,只有浏览器才能看到JS文件内容。

另一个有趣的想法是,在脚本的末尾,您删除了DOM脚本元素的内容,因此在浏览器评估您的代码后,代码消失:

<script id="erasable" type="text/javascript">
    //your code goes here
    document.getElementById('erasable').innerHTML = "";
</script>

这些都是不能做出的简单hack,我不能足够强调:不能完全保护您的JS代码,但是他们可以肯定会惹恼试图“窃取”您的代码的人。

更新:

我最近遇到了 一篇非常有趣的文章 写的 帕特里克·韦德 关于如何隐藏JS代码,他揭示了另一种方法:您可以将源代码编码为图像!当然,这也不是防弹的,但这是另一个 栅栏 您可以围绕代码构建。
这种方法背后的想法是,大多数浏览器都可以使用帆布元素对图像进行像素操作。并且由于画布像素由4个值(RGBA)表示,因此每个像素的值在0-255的范围内。这意味着您可以在每个像素中存储一个字符(实际是ASCII代码)。其余的编码/解码是微不足道的。
谢谢,帕特里克!

其他提示

你唯一能做的就是 混淆 您的代码使阅读更加困难。无论您做什么,如果您希望JavaScript在其浏览器中执行,则必须具有代码。

读这个. 。它具有一种非常好的方法,可以将您的代码隐藏在视图源和调试工具(例如Firebug)中。

据我所知,这是不可能的。

您的浏览器必须访问JS文件才能执行它们。如果浏览器可以访问,则浏览器的用户也可以访问。

如果密码保护JS文件,则浏览器将无法访问它们,而是首先击败了拥有JS的目的。

就在我的头顶上,您可以做这样的事情(如果您可以创建服务器端脚本,听起来很像您可以):

与其像普通那样加载脚本,不如将AJAX请求发送到PHP页面(可能是任何东西;我自己只使用它)。让PHP找到文件(也许在服务器的非公共部分),请使用 file_get_contents, ,返回(阅读: echo)内容作为字符串。

当此字符串返回JavaScript时,请创建一个新的 script 标签,填充其 innerHTML 使用您刚收到的代码,并将标签附加到页面上。 (你 可能 遇到麻烦; innerHTML 可能不是您需要的,但您可以进行实验。)

如果您经常这样做,您甚至可能要设置一个使用脚本名称的GET变量的PHP页面,以便您可以使用相同的PHP动态地捕获不同的脚本。 (也许您可以改用帖子,使其他人更难看到您的工作。我不知道。)

编辑: 我以为你只是想隐藏 地点 脚本。如果您试图隐藏脚本本身,这显然无济于事。

算了,这是不可行的。

无论您尝试什么,它都无法正常工作。用户需要做的所有来发现您的代码,它的位置就是在“网络”选项卡中查看 火焰 或使用 提琴手 查看正在提出什么请求。

Google关闭编译器, YUI压缩机, 缩小, /Packer/...等,是压缩/混淆JS代码的选项。但是,没有一个可以帮助您对用户隐藏代码。

任何具有体面知识的人都可以使用诸如 JS美容人. 。你命名。

因此,答案是,您始终可以使代码更难读取/解码,但是可以肯定的是没有办法隐藏。

我认为,唯一的方法是将所需的数据放在服务器上,并仅允许登录的用户根据需要访问数据(您还可以进行一些计算服务器端)。此不会保护您的JavaScript代码,但没有服务器端代码使其无法执行

正如我在评论中所说的那样,我之前在gion_13答案上留下了(请阅读),您真的不能。不使用JavaScript。

如果您不希望代码可用客户端(=无需努力就可以偷窃),我的建议是使用PHP(ASP,Python,Perl,Ruby,JSP + Java-Servlets),该服务器已处理后服务器 - 仅将计算/代码执行的结果提供给用户。或者,如果您愿意,即使是闪光灯或Java-applet,可以让客户端计算/代码执行但进行编译,因此更难反向发动机(因此不是不可能)。

只是我的2美分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top