一个简单答案的好问题:你不能!
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>
这些都是不能做的简单黑客,我不能强调这一点:不能,完全保护你的 js 代码,但他们肯定会激怒试图“窃取”你的代码的人。
更新:
我最近看到了Patrick Weid写的一篇非常有趣的文章,关于如何隐藏你的 js 代码,他揭示了一种不同的方法:你可以将你的源代码编码成图像!当然,这也不是防弹的,但它是您可以围绕代码构建的另一道屏障。
这种方法背后的想法是大多数浏览器都可以使用 canvas 元素对图像进行像素操作。并且由于画布像素由 4 个值(rgba)表示,每个像素可以有一个 0-255 范围内的值。这意味着您可以在每个像素中存储一个字符(实际上是 ascii 代码)。其余的编码/解码是微不足道的。
谢谢,帕特里克!