代码之家  ›  专栏  ›  技术社区  ›  stevendesu

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

  •  0
  • stevendesu  · 技术社区  · 15 年前

    因此,我最近一直在研究一个脚本来模糊客户端代码,以保护知识产权,而不影响结果页面的外观或交互性。过程如下:

    1. 解析_请求.php创建一个“phpURLParser”类,其类变量实际上是$\u服务器变量的副本
    2. phpURLParser查看请求的路径,有时还查看主机、referer或其他服务器端信息,以确定如何做出反应。有几种可能的反应

    a、 请求的对象是.js或.css文件。将文件传递给YUI压缩器并发送输出

    b、 请求的对象是图像或应用程序。不加改动地传递文件

    c、 请求的对象包含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>
    

    因此,网站被大量的hex和一个小javascript替换,以将hex恢复到原来的形式。我有一个这样的例子examples.chikachu.com/colorbox/example1(我没有编写ColorBox,这是一个免费的jQuery工具,我选择使用它,因为它允许我测试几个不同的javascript特性,并确保它们都能正常工作)

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

    如果我修改parse_请求.php为了让AJAX请求的文件能够安全地通过,一切都正常。没问题。因此,出于某种原因,我的脚本将十六进制字符串替换为有意义的HTML对应字符串,它将覆盖整个网站,而不是将自己很好地插入到<div>对象的范围内。

    基本上,这里是预期的非模糊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>
    

    我希望文档.写入()这里的行将在javascript的位置(在<div>中)写入y。如果我错了而不是这样文档.写入()有效,我仍然希望它在文档末尾写y。相反,整个文档被y替换。为什么会这样,我的解决方案是什么?

    2 回复  |  直到 5 年前
        1
  •  0
  •   Joel Etherton    15 年前

    尝试以下操作:

    <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> 
    
        2
  •  1
  •   mx0 aleclara95    15 年前

    最后一个问题的答案: 打电话

    将附加或重写页上的文本,具体取决于调用该页的时间(在onLoad事件之前或之后)。你不应该用它 任何 http://javascript.crockford.com/script.html

    一般回答: 混淆HTML代码没有任何意义。就像在90年代后期禁用鼠标右键来保护图像一样。我花了不到3秒的时间“破解”你的模糊代码,得到格式精美的HTML。你的网站也呈现在 这可能是你不想要的。