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

使用PHP重命名JavaScript变量和函数,php,javascript,class,function,variables,Php,Javascript,Class,Function,Variables,我已经搜索并找到了另一个非常接近的问题,但结果是YUI压缩机,我没有发现有用的 我使用php来混淆我的JavaScript代码,但这还不够。我需要一个php脚本,我可以运行,然后重命名所有函数和变量的随机名称(只有字母)和原因之前,我混淆 我见过一些,但它们要么是像Java这样的独立程序,要么是你需要付费的东西,我不能使用它们 有没有人知道一个类或代码段可以做到这一点 如果YUI压缩器真的能做到这一点,有人能指出一些帮助,帮助我如何将其实现到php中吗?我不知道为什么要这样做,但这似乎是一项非常

我已经搜索并找到了另一个非常接近的问题,但结果是YUI压缩机,我没有发现有用的

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

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

有没有人知道一个类或代码段可以做到这一点


如果YUI压缩器真的能做到这一点,有人能指出一些帮助,帮助我如何将其实现到php中吗?

我不知道为什么要这样做,但这似乎是一项非常容易手动完成的任务

您只需编写一个生成随机字符串的函数,在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)" ; ?>
$var1=generateRandomString()//自定义方法创建随机字符串,并在末尾附加唯一的字母,以确保没有重复。
$function1=generateRandomString();
在javascript中。。。
//变量赋值

等等。

在写了这个冗长的回复之后,我开始想知道为什么首先需要混淆javascript代码?Javascript代码本质上是公共的,任何查看您的页面的人都可以看到结果。如果您需要做一些秘密/专有的事情,可以研究AJAX之类的东西,或者通过回调服务器来进行处理,并让它为javascript输出结果。任何人都可以看到您在javascript中所做的任何处理。混淆只会使调试变得更困难,而且不能保证防止有人破解代码

通常使用javascript控制表示,将服务器调用的结果解析到文档中,并验证用户输入。任何你想做的事情,都可以在服务器端进行,这样他们就看不到正在进行的确切代码

如果你还想改名的话,我的回答如下:

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

  • 如果/当您的javascript使用内置变量名,如
    document
    window
    ,以及类似
    .getElementById()
    的wise内置函数时。那些你触摸不到的或者脚本不能做它本该做的事情
  • 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文件,然后由浏览器下载并解析该文件)并增加带宽消耗,但一个页面的两个脚本不会相同

总的来说,这看起来不像是你想承担的一个人(甚至2人或3人)的项目(除非你手头有很多时间,但事情会发生变化),可能已经有类似的东西出现了,或者你可以根据自己的需要进行修改。从本质上说,我认为你想要做的工作将超出其价值。

通常,缩小javascript文件就足够了:实时或离线,这取决于这些文件的稳定性。但可能是这样的在这种情况下有一个特殊的要求。当然,你可能会问为什么:)天哪,我讨厌我不能按enter键换行…无论如何,我正在制作一个浏览器游戏,并试图用动态加载的javascript来集中游戏的大部分。我不能离线完成所有这些,因为javascript是由php文件打印的,所有这些都取决于很多设置