AJAX返回要解析的javascript会导致页面内容丢失

时间:2010-09-28 03:19:51

标签: javascript html ajax obfuscation deobfuscation

所以我最近一直在编写一个脚本来混淆客户端代码以保护知识产权,而不会干扰结果页面的交互性。过程如下:

  1. HTTP请求进来,.htaccess重定向(。*)到parse_request.php
  2. parse_request.php创建一个“phpURLParser”类,其类变量基本上是$ _SERVER变量的副本
  3. phpURLParser查看请求的路径,有时查看主机,引用者或其他服务器端信息以确定如何做出反应。有几种可能的回应
  4. 一个。请求的对象是.js或.css文件。将文件传递给YUI Compressor并发送输出

    湾请求的对象是图像或应用程序。传递文件没有变化

    ℃。请求的对象包含HTML。将每个ASCII字符替换为其2位十六进制等效值并发送以下javascript:

    <script type="text/javascript">
    var x="~lots of hex~";
    var y="";
    for(i=0; i<x.length; i+=2){
        y += unescape('%'+x.substr(i,2));
    }
    document.write(y);
    </script>
    

    因此,网站被大量的十六进制和一个小的javascript取代,以将十六进制返回到其原始形式。我在examples.chikachu.com/colorbox/example1上有一个这样的设置示例(我没有编写ColorBox代码,它是我选择使用的免费jQuery工具,因为它允许我测试几个不同的javascript功能并确保它们全部工作)

    现在出现问题:

    事实证明,99%的时间都有效。但AJAX让它生气。单击其中一个AJAX示例(在“其他内容类型”下)看起来会将您重定向到新页面。但是,查看地址栏或查看页面源将证明您仍然在同一页面上。使用Chrome中的Inspect Element工具(或Firefox中的Firebug)将显示网页内容完全被AJAX请求的内容替换。

    如果我稍微修改parse_request.php以允许AJAX请求的文件无损地传递,一切正常。没问题。因此,出于某种原因,我的脚本将其十六进制字符串替换为其有意义的HTML副本,它将覆盖整个网站,而不是很好地将其自身插入到&lt; div&gt;的范围内。对象

    基本上这是预期的非混淆HTML:

    <html>
    <head>
        ...
    </head>
    <body>
        <div id="colorbox">
            <INSERT AJAX HERE>
        </div>
        ...
    </body>
    </html>
    

    只有AJAX被混淆,我希望如下:

    <html>
    <head>
        ...
    </head>
    <body>
        <div id="colorbox">
            <script type="text/javascript">
            var x="asdfasdfasdfasdf";
            var y="";
            for(i=0; i<x.length; i+=2){
                y += unescape('%'+x.substr(i,2));
            }
            document.write(y);
            </script>
        </div>
        ...
    </body>
    </html>
    

    我希望这里的document.write()行会在javascript的位置写入y(在&lt; div&gt;内)。如果我错了,那不是document.write()的工作方式,我仍然期望它在文档的末尾写y。相反,整个文档被替换为y。为什么会这样,我的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

回答你的上一个问题: 致电

  

文件撰写( 'my_precious_html_code');

将根据调用时(onLoad事件之前或之后)附加或覆盖页面上的文本。您不应该使用任何脚本。在此处阅读更多相关信息:http://javascript.crockford.com/script.html

一般答案: 混淆HTML代码没有任何意义。就像在90年代末通过禁用鼠标右键来保护图像一样。我花了不到3秒的时间来“破解”你的混淆代码并获得格式精美的HTML。此外,您的网站也会以怪癖模式呈现,这可能是您不想要的。

答案 1 :(得分:0)

尝试这样的事情:

<html> 
<head> 
    ... 
</head> 
<body> 
    <div id="colorbox">
        <div id="MYAJAXCONTENT">
        </div>
        <INSERT AJAX HERE> 
    </div> 
    ... 
</body> 
</html> 

<html> 
<head> 
    ... 
</head> 
<body> 
    <div id="colorbox"> 
        <script type="text/javascript"> 
        var x="asdfasdfasdfasdf"; 
        var y=""; 
        for(i=0; i<x.length; i+=2){ 
            y += unescape('%'+x.substr(i,2)); 
        } 
        document.getElementById('MYAJAXCONTENT').innerHTML = y; 
        // for the jQuery psychos out there
        // $('#MYAJAXCONTENT').html(y);
        </script> 
    </div> 
    ... 
</body> 
</html>