一个简单的答案,很好的问题:你不能!
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\*/");
?>
那将包含在您的主页my-page.php中:
<script type="text/javascript">
<?php include "myJs.php"; ?>;
</script>
这样,只有浏览器才能看到js文件的内容。
另一个有趣的想法是,在脚本末尾,删除dom脚本元素的内容,以便在浏览器评估您的代码之后,该代码消失:
<script id="erasable" type="text/javascript">
document.getElementById('erasable').innerHTML = "";
</script>
这些都是无法做到的简单黑客,我不能对此施加足够的压力:不能完全保护您的js代码,但是它们可以肯定激怒了试图“窃取”您代码的人。
更新:
最近,我遇到了Patrick Weid写的一篇非常有趣的文章,内容涉及如何隐藏您的js代码,他揭示了一种不同的方法:您可以将源代码编码为图像!当然,这也不是防弹的,但这是您可以围绕代码构建的另一道围栏。
这种方法背后的思想是,大多数浏览器可以使用canvas元素对图像进行像素处理。并且由于画布像素由4个值(rgba)表示,因此每个像素可以具有0-255范围内的值。这意味着您可以在每个像素中存储一个字符(实际上是ASCII码)。其余的编码/解码很简单。
谢谢,帕特里克!