我已经搜索过并发现了另一个非常接近的问题,但结果是YUI Compressor,我没有发现它有用。
我使用php来模糊我的JavaScript代码,但这还不够。我需要一个我可以运行的PHP脚本,然后在混淆之前将所有函数和变量重命名为随机名称(仅限字母)和之前。
我见过一些,但他们要么像Java这样的独立程序,要么需要付出代价,我不能用它。
是否有人知道可能能够执行此操作的类或代码段?
如果YUI Compressor实际上可以做到这一点,有人能指出我如何将其实现到php中的一些帮助吗?
答案 0 :(得分:2)
写完这篇冗长的回复后,我开始想知道为什么你需要首先混淆javascript代码? Javascript代码本质上是公开的,任何查看您页面的人都可以看到结果。如果你有秘密/专有的东西你需要做的事情,看看像AJAX或其他方式回调你的服务器进行处理,并让它吐出javascript的结果。您在javascript中执行的任何处理都将被任何人看到。混淆只会使调试变得更难,并且不能保证人们不会破解代码。
通常使用javascript来控制演示文稿,将服务器调用的结果解析为文档,并验证用户输入。你想做的任何秘密,都要在服务器端进行,否则他们无法看到正在发生的确切代码。
如果您仍然想要重命名路线,那么我的回答是我的回答:
我没有花时间去研究YUI压缩器的时间,但是你所描述的内容听起来像你需要解析任何javascript,并从那里开始重命名函数和变量。我看到了一些问题
document
或window
)和类似内置函数(如.getElementById()
)时。那些你无法触摸或脚本无法完成它的目的。Javascripts在浏览器的上下文中执行,并且可能使用来自HTML之类的其他javascript文件中的函数/变量,如
由于<script type="text/javascript" src="a.js"></script>
<script type="text/javascript" src="b.js"></script>
b.js
之后包含a.js
,b.js
可以引用并使用a.js
中的任何函数或变量,因此如果您对名称进行加扰,则必须确保进行任何引用b.js
中的a.js
会更新为您的新名称。
根据您希望进行此重命名的频率,您可以轻松地修复代码,而不是完全删除浏览器缓存
总的来说,这似乎不是一个你想要进行的1人(甚至2或3人)项目(除非你手上有很多时间,但事情会发生变化),可能会有这样的东西已经存在,或者你可以分离出来并根据你的需要进行修改。从本质上讲,我认为你想做的事情将是更多的工作,而不是它的价值。
答案 1 :(得分:1)
我不确定你为什么要这样做,但手动做起来似乎很容易。
您所需要的只是编写一个生成随机字符串的函数,并在您的PHP中为您拥有的所有JavaScript函数定义变量,并为其分配随机字符串。然后在打印出实际JavaScript方法的代码时替换它们。唯一需要注意的是你需要仔细检查你的随机字符串是不是重复。如果您不能使用数字(根据您的问题),那么使用字母并将它们递增到附加在随机字符串的后面。所以在伪代码中......
$var1 = generateRandomString(); //custom method to create random string and append unique letter at end to guarantee no duplicates.
$function1 = generateRandomString();
and in javascript...
//variable assignment
<?php echo "$var1='foo'"; ?>;
//function definition
function <?php echo "$function1" ; ?>( myArg ){
alert(myArg); //this will alert 'foo'
}
//calling the function
<?php echo "$function1($var1)" ; ?>
等