簡體   English   中英

AJAX 返回要解析的 javascript 會導致頁面內容丟失

[英]AJAX returning a javascript to be parsed results in loss of page contents

所以我最近一直在編寫一個腳本來混淆客戶端代碼以保護知識產權而不干擾結果頁面的外觀或交互性。 過程如下:

  1. HTTP 請求進來,.htaccess 重定向 (.*) 到 parse_request.php
  2. parse_request.php 創建一個“phpURLParser”類,它的類變量本質上是 $_SERVER 變量的副本
  3. phpURLParser 會查看請求的路徑,有時還會查看主機、引用者或其他服務器端信息,以確定如何做出反應。 有幾種可能的反應

a. 請求的對象是 .js 或 .css 文件。 將文件傳遞給 YUI 壓縮器並發送輸出

請求的對象是圖像或應用程序。 不做任何更改地傳遞文件

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>

因此,該網站被大量十六進制和一個小的 javascript 替換,以將十六進制恢復為原始形式。 我在 examples.chikachu.com/colorbox/example1 上有一個關於此設置的示例(我沒有編寫 ColorBox,它是我選擇使用的免費 jQuery 工具,因為它允許我測試幾個不同的 javascript 功能並確保它們全部工作)

現在的問題:

事實證明,這在 99% 的情況下都有效。 但是 AJAX 讓它生氣了。 單擊 AJAX 示例之一(在“其他內容類型”下)看起來會將您重定向到一個新頁面。 但是,查看地址欄或查看頁面源將證明您仍在同一頁面上。 使用 Chrome 中的 Inspect Element 工具(或 Firefox 中的 Firebug)將顯示網頁內容完全被 AJAX 請求的內容替換。

如果我稍微修改 parse_request.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>

我希望這里的 document.write() 行會在 javascript 的位置(在 <div> 內)寫入 y。 如果我弄錯了並且這不是 document.write() 的工作方式,我仍然希望它在文檔的末尾寫 y。 相反,整個文檔被 y 替換。 這是為什么,我的解決方案是什么?

回答你的最后一個問題:打電話

document.write('my_precious_html_code');

將根據調用時間(在 onLoad 事件之前或之后)附加或覆蓋頁面上的文本。 你不應該使用它任何腳本。 在此處閱讀更多相關信息: http : //javascript.crockford.com/script.html

一般答案:混淆 HTML 代碼沒有任何意義。 就像在 90 年代末通過禁用鼠標右鍵來保護圖像一樣。 我花了不到 3 秒的時間來“破解”您的混淆代碼並獲得格式精美的 HTML。 此外,您的網站以quirks 模式呈現,這可能是您不想要的。

嘗試這樣的事情:

<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> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM