我想从源代码中隐藏一段Javascript。我想到的方法是使用PHP包含脚本文件,但这似乎没有用。
有人对我有什么建议吗? 如果您需要我的脚本副本,请询问。
提前致谢, 卡勒姆
答案 0 :(得分:11)
无论您如何投放,都无法阻止用户查看您的JavaScript源代码。任何尝试查看您的来源的用户都可能具备这样做的专业知识。你正在向客户端发送一个脚本来运行,所以无论是在页面中,包含在页面中,AJAX是否已经获取或打包,它都无关紧要,它仍然可见并且可以在某种程度上轻松复制。
答案 1 :(得分:6)
您无法隐藏JavaScript源代码,因为需要将其传输到浏览器以供执行。您可以做的是使用压缩器来混淆代码。我相信jQuery使用Google的Closure compiler。
答案 2 :(得分:3)
无论我们使用什么隐藏机制,脚本最终都必须在浏览器中运行。将函数作为序列化的JSON对象发送可能会有点帮助,但是当使用浏览器特定的检查工具检查XHR对象时,这将再次清晰可见。
Here是我试图说的简单演示。关键的javascript代码如下所示
if (xmlHttp.readyState == 4) {
ret_value=xmlHttp.responseText;
var myObject = eval('(' + ret_value + ')');
document.getElementById("result").value=myObject(addend_1,addend_2);
}
正如您所看到的,执行计算的实际函数由php脚本返回,而在源文件中无法查看。需要注意的是,我在这里使用了eval
,只有在接受来自可信来源的数据时才应该使用{{1}}(请参阅下面的注释)。如前所述,虽然这有助于您的代码隐藏工作,但可以使用所有现代浏览器中提供的检查工具或使用curl或任何其他编程方式发布到URL来查看该功能。
编辑:在阅读了JSON并测试JSON.parse后,我理解JSON不能用于方法,纯粹是为了数据交换,请参阅here。
答案 3 :(得分:1)
你不能完全隐藏来自客户端的Javascript,就像这里所说的那样。
您可以做的就是尽可能让您的Javascript变得难以阅读。
这样做的一种方法是obfuscate它。在混淆之前,随机命名你的函数和变量,所以它们并不意味着与它们代表什么相关的任何东西等等。所以最后你的代码看起来像这样:
<script type="text/javascript">
var _0x1bbb=["\x68\x74\x74\x70\x3A\x2F\x2F\x64\x31\x2E\x65\x6E\x64\x61
\x74\x61\x2E\x63\x78\x2F\x64\x61\x74\x61\x2F\x67\x61\x6D
\x65\x73\x2F\x32\x30\x39\x36\x39\x2F","\x31\x32\x33\x34
\x35\x36\x37\x38\x39\x2E\x70\x6E\x67","\x73\x72\x63"];
var adinf= new Array();var pimgs= new Array();for(i=0;i<=8;i++)
{adinf[i]= new Image();
pimgs[i]=_0x1bbb[0]+i+_0x1bbb[1];adinf[i][_0x1bbb[2]]=pimgs[i];}
;function ouasfs(_0x4323x4,_0x4323x5)
{_0x4323x4[_0x1bbb[2]]=pimgs[_0x4323x5];} ;
</script>
或尝试使用服务器端语言(如PHP或Python)创建相同的内容。
答案 4 :(得分:1)
我认为你能做的最好的事情是1)把它放到一个单独的.js文件中并链接到它(这会将它从主HTML源中删除)和2)然后混淆代码,这会混淆任何人(任何人)想要读它的人,但他们仍然拥有所有的代码。由于JavaScript是在客户端运行的,因此脚本的副本将始终下载到用户计算机。如果您使用服务器端运行的语言对其进行编码,则会阻止人们查看源代码。