使用 PHP 重命名 JavaScript 变量和函数


Using PHP to rename JavaScript variables and functions

我已经搜索并找到了另一个非常接近的问题,但结果是 YUI Compressor,我觉得这没有用。

我使用php来混淆我的JavaScript代码,但这还不够。 我需要一个可以运行的 php 脚本,然后在混淆之前将所有函数和变量重命名为随机名称(仅限字母)和 ofcause。

见过一些,但它们要么是像Java这样的独立程序,要么是你需要付费的东西,我不能使用它。

有谁知道可能能够做到这一点的类或代码片段?

如果 YUI 压缩器真的可以做到这一点,谁能指出一些关于我如何将它实现到 php 中的帮助?

在写完这个冗长的回应之后,我开始想知道为什么首先需要混淆javascript代码?Javascript代码本质上是公开的,任何查看您的页面的人都可以看到结果。如果你有秘密/专有的东西需要做,看看像AJAX这样的东西,或者对你的服务器进行回调来做处理,让它吐出javascript的结果。你在javascript中所做的任何处理都将被任何人看到。混淆只会使调试更加困难,并且不能保证阻止某人破解代码。

通常使用 javascript 来控制表示,将服务器调用的结果解析到文档中,并验证用户输入。你想要做的任何秘密,在服务器端做,他们看不到正在发生的确切代码。

有了这个,如果你仍然想走重命名路线,这是我的回应:

我还没有花时间谷歌什么是YUI压缩器,但是你描述的听起来像你需要解析任何javascript,然后从那里重命名函数和变量。我看到一些问题

  • 如果/当你的javascript使用内置变量名称(如documentwindow)和类似内置函数(如.getElementById())。那些你不能碰或剧本不能做它应该做的事情。
  • Javascript在浏览器的上下文中执行,并且可能使用其他JavaScript文件中的函数/变量,例如HTML

    <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中的任何引用都适当地更新为新名称。
  • 根据您想要进行此重命名的频率,您需要权衡让代码更容易被破解与完全破坏浏览器缓存

    • 只需修改一次名称并保留结果 - 然后浏览器将正确缓存响应,您的网站应该运行良好,但是由于名称在调用之间保持一致,因此有人会更容易破解重命名。虽然对于这个解决方案,你不一定需要PHP,只需要任何语言或脚本并运行一次
    • 修改每个会话的名称 - 可能是最好的解决方案和中间道路,尽管它需要您保留与每个会话相关的额外内存,以便从同一会话中重命名任何新 java 脚本文件的请求都会按原样重命名(大多数现代浏览器和服务器设置将允许缓存相同的命名 javascript 文件,以便如第 2 点中所述,如果有任何函数/变量a.js被另一个JavaScript文件使用,它们将不得不相应地更新
    • 根据请求修改 javascript 文件 - 这可能需要您禁用 javascript 文件的缓存,因为即使用户重新加载同一页面,页面的每个请求都需要下载新的 javascript 文件。这将大大降低页面加载性能(您必须再次重命名所有函数并生成一个新的javascript文件,然后由浏览器下载并由其解析),并且还会增加带宽消耗,但是页面没有两个脚本是相同的。

总的来说,这似乎不像你想要承担的 1 人(甚至 2 或 3 人)项目(除非你手头有很多时间,但后来事情会改变),可能已经有这样的东西已经存在或接近的东西,你可以分叉并修改你的需要。从本质上讲,我认为你想做的将是比它的价值更多的工作。

我不确定你为什么要这样做,但手动完成这似乎是一项非常简单的任务。

你所需要的只是编写一个生成随机字符串的函数,并在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)" ; ?>

等。