好问题,简单回答:你不能!
JavaScript 是一种客户端编程语言,因此它在客户端计算机上运行,因此您实际上无法向客户端隐藏任何内容。
混淆代码是一个很好的解决方案,但这还不够,因为尽管这很困难,但有人可以破译您的代码并“窃取”您的脚本。
有几种方法可以使您的代码难以被窃取,但正如我所说,没有什么是万无一失的。
我突然想到,一个想法是限制从嵌入代码的页面外部访问外部 js 文件。在这种情况下,如果您有
<script type="text/javascript" src="myJs.js"></script>
并且有人尝试访问myJs.js
如果他在浏览器中打开文件,则不应授予他对脚本源的任何访问权限。
例如,如果您的页面是用 PHP 编写的,您可以通过以下方式包含该脚本include
函数并让脚本决定是否safe" 返回它的来源。
在此示例中,您将需要外部“js”(用 PHP 编写)文件myJs.php
:
<?php
$URL = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
if ($URL != "my-domain.example/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>
这些都只是简单的黑客行为,不能,我不能足够强调这一点:不能,完全保护你的 js 代码,但它们肯定会激怒那些试图“窃取”你的代码的人。
Update:
我最近遇到一篇非常有趣的文章写于帕特里克·魏德关于如何隐藏你的 js 代码,他揭示了一种不同的方法:你可以将源代码编码到图像中!当然,这也不是防弹的,但这是另一个fence您可以围绕您的代码进行构建。
这种方法背后的想法是,大多数浏览器可以使用 canvas 元素对图像进行像素操作。由于画布像素由 4 个值(rgba)表示,因此每个像素可以具有 0-255 范围内的值。这意味着您可以在每个像素中存储一个字符(实际上是 ascii 代码)。其余的编码/解码是微不足道的。