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