そのため、私は最近、クライアント側のコードを難読化して、結果のページの外観や対話性を妨げずに知的財産を保護するスクリプトに取り組んでいます。プロセスは次のとおりです。
- HTTP リクエストが着信し、.htaccess が (.*) を parse_request.php にリダイレクトします
- parse_request.php は、クラス変数が本質的に $_SERVER 変数のコピーである「phpURLParser」クラスを作成します
- phpURLParser は要求されたパスを調べ、場合によってはホスト、リファラー、またはその他のサーバー側の情報を調べて、対応方法を決定します。いくつかの可能な応答があります
を。要求されたオブジェクトは .js または .css ファイルでした。ファイルを YUI Compressor に渡し、出力を送信します
b. 要求されたオブジェクトはイメージまたはアプリケーションです。ファイルを変更せずに渡す
c. 要求されたオブジェクトには HTML が含まれています。すべての ASCII 文字を 2 桁の 16 進数に置き換えて、次の 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>
そのため、Web サイトは多数の 16 進数と小さな JavaScript に置き換えられ、16 進数を元の形式に戻します。このセットアップの例は、examples.chikachu.com/colorbox/example1 にあります (ColorBox はコーディングしませんでした。これは無料の jQuery ツールであり、いくつかの異なる JavaScript 機能をテストし、すべてを確認することができたので、使用することにしました。働きました)
問題は次のとおりです。
結局のところ、これは 99% の確率で機能します。しかし、AJAX はそれを怒らせます。AJAX の例の 1 つ (「その他のコンテンツ タイプ」の下) をクリックすると、新しいページにリダイレクトされるように見えます。ただし、アドレス バーを見たり、ページ ソースを表示したりすると、同じページにいることがわかります。Chrome (または Firefox の Firebug) で Inspect Element ツールを使用すると、Web ページのコンテンツが AJAX リクエストのコンテンツに完全に置き換えられていることがわかります。
parse_request.php を少し変更して、AJAX によって要求されたファイルを無傷で通過できるようにすると、すべてが機能します。問題ない。したがって、何らかの理由で、16 進数の文字列を意味のある HTML 対応する文字列に置き換えるスクリプトは、 <div> オブジェクトの範囲内にうまく挿入するのではなく、Web サイト全体を上書きしています。
基本的に、予想される難読化されていない 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 に置き換えられます。これはなぜですか、私の解決策は何ですか?