Jml*_*ick 66 javascript source-code-protection
我知道隐藏源代码是不可能的,但是,例如,如果我必须将我的CDN中的JavaScript文件链接到网页,并且我不希望人们知道此脚本的位置和/或内容,这是可能?
例如,要从网站链接脚本,我们使用:
<script type="text/javascript" src="http://somedomain.com/scriptxyz.js">
</script>
Run Code Online (Sandbox Code Playgroud)
现在,是否可以向脚本所在的用户隐藏,或隐藏脚本内容并仍然在网页上使用它?
例如,通过将其保存在需要密码来访问文件的私有CDN中,这会起作用吗?如果没有,有什么办法可以得到我想要的东西?
gio*_*_13 96
Javascript是一种客户端编程语言,因此它可以在客户端的机器上运行,因此您无法实际隐藏客户端中的任何内容.
混淆代码是一个很好的解决方案,但这还不够,因为虽然很难,但有人可能会破译你的代码并"窃取"你的脚本.
有几种方法可以让你的代码很难被窃取,但正如我所说,没有什么是防弹的.
在我的脑海中,一个想法是限制从嵌入代码的页面外部访问外部js文件.在这种情况下,如果你有
<script type="text/javascript" src="myJs.js"></script>
Run Code Online (Sandbox Code Playgroud)
并且有人试图在浏览器中访问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
Run Code Online (Sandbox Code Playgroud)
这将包含在您的主页my-page.php中:
<script type="text/javascript">
<?php include "myJs.php"; ?>;
</script>
Run Code Online (Sandbox Code Playgroud)
这样,只有浏览器才能看到js文件内容.
另一个有趣的想法是,在脚本结束时,删除dom脚本元素的内容,以便在浏览器评估代码后代码消失:
<script id="erasable" type="text/javascript">
//your code goes here
document.getElementById('erasable').innerHTML = "";
</script>
Run Code Online (Sandbox Code Playgroud)
这些都只是简单的黑客攻击,我不能强调这一点:不能,完全保护你的js代码,但他们可以肯定会惹恼那些试图"窃取"你的代码的人.
我最近发现了一篇由Patrick Weid写的关于如何隐藏你的js代码的非常有趣的文章,他揭示了一种不同的方法:你可以将源代码编码成图像!当然,这也不是防弹,但它是你可以围绕代码构建的另一个围栏.
这种方法背后的想法是大多数浏览器可以使用canvas元素对图像进行像素操作.并且由于画布像素由4个值(rgba)表示,因此每个像素可以具有0-255范围内的值.这意味着您可以在每个像素中存储一个字符(实际上是ascii代码).其余的编码/解码是微不足道的.
谢谢,帕特里克!
归档时间: |
|
查看次数: |
122410 次 |
最近记录: |