1

私は非常に近い質問で別のものを検索して見つけましたが、結果はYUI Compressorであり、それは有用ではありませんでした。

phpを使用してJavaScriptコードを難読化していますが、それだけでは不十分です。実行して、すべての関数と変数の名前をランダムな名前(文字のみ)に変更できるphpスクリプトが必要です。これは、難読化する前に行う必要があります。

私はいくつか見たことがありますが、それらはJavaのようなスタンドアロンのプログラムか、あなたがお金を払う必要があるもののどちらかであり、私はそれを使うことができません。

誰かがそれを行うことができるかもしれないクラスまたはコードスニペットを知っていますか?

そして、YUI Compressorが実際にそれを実行できる場合、それをphpに実装する方法について誰かが助けを指摘できますか?

4

2 に答える 2

2

この長々とした応答を書いた後、私はなぜあなたがそもそもjavascriptコードを難読化する必要があるのか​​疑問に思い始めました。Javascriptコードは本質的に公開されており、ページを見ている人は誰でも結果を見ることができます。実行する必要のある秘密/独自の処理がある場合は、AJAXのようなものを調べるか、サーバーにコールバックして処理を実行し、JavaScriptの結果を吐き出させます。javascriptで行う処理はすべて、誰でも見ることができます。難読化するとデバッグが難しくなり、誰かがコードを解読するのを防ぐことが保証されません。

一般に、JavaScriptを使用してプレゼンテーションを制御し、サーバー呼び出しからの結果をドキュメントに解析し、ユーザー入力を検証します。あなたがしたい秘密は何でも、彼らが起こっている正確なコードを見ることができないサーバー側でしてください。

そして、それが私の胸から離れているので、あなたがまだ名前の変更ルートに行きたいのであれば、ここに私の応答があります:

私はまだYUIコンプレッサーが何であるかをGoogleに説明していませんが、あなたが説明していることは、JavaScriptを解析し、そこから関数と変数の名前を変更する必要があるように聞こえます。いくつかの問題があります

  • documentjavascriptがまたはのような組み込み変数名を使用する場合/および同様に。windowのような組み込み関数.getElementById()。触れられないものや、スクリプトが意図したとおりに実行できないもの。
  • Javascriptはブラウザのコンテキストで実行され、HTMLのような他のjavascriptファイルの関数/変数を使用する場合があります。

    <script type="text/javascript" src="a.js"></script>
    <script type="text/javascript" src="b.js"></script>
    
    の後にb.js含まれている ので、任意の関数または変数を参照して使用できます。したがって、名前をスクランブルする場合は、で行われた参照が新しい名前に適切に更新されていることを確認する必要があります。a.jsb.jsa.jsb.js

  • この名前変更を実行する頻度に応じて、コードを簡単に解読することと、ブラウザーのキャッシュを完全に破棄することとのトレードオフがあります。

    • 名前を一度だけ変更して結果を保持します。そうすれば、ブラウザは応答を正しくキャッシュし、サイトはかなりうまく機能するはずですが、名前は呼び出し間で一貫しているため、誰かが名前の変更を簡単に解読できます。このソリューションでは、必ずしもPHPは必要ありませんが、任意の言語またはスクリプトを使用して1回実行するだけです。
    • セッションごとに名前を変更します-おそらく最善の解決策であり、途中で名前の変更に関して各セッションに追加のメモリを保持する必要があるため、同じセッションからの新しいJavaScriptファイルのリクエストは必要に応じて名前が変更されます(最新のブラウザとサーバー設定のほとんどでは、ポイント2で説明したように、同じ名前のjavascriptファイルをキャッシュできます。そのため、の関数/変数a.jsが別のjavascriptファイルで使用されている場合は、それに応じて更新する必要があります。
    • リクエストごとにJavaScriptファイルを変更する-ユーザーが同じページをリロードした場合でも、ページに対するすべてのリクエストで新しいJavaScriptファイルをダウンロードする必要があるため、JavaScriptファイルのキャッシュを無効にする必要がある場合があります。これにより、ページの読み込みパフォーマンスが大幅に低下し(すべての関数の名前を再度変更して、新しいjavascriptファイルを生成し、ブラウザーでダウンロードして解析する必要があります)、帯域幅の消費量も増加しますが、ページに2つのスクリプトはありません。同様に。

全体として、これはあなたが着手したい1人(または2人または3人)のプロジェクトのようには見えません(あなたがあなたの手に多くの時間を持っているが、その後状況が変わる場合を除いて)、このようなものがあるかもしれませんすでにそこにあるか、あなたがフォークしてあなたのニーズに合わせて修正することができる何か近いものがあります。基本的に、あなたがやりたいことは、その価値よりも多くの仕事になると思います。

于 2012-06-23T16:46:20.260 に答える
1

なぜこれを実行したいかはわかりませんが、手動で実行するのは非常に簡単な作業のようです。

必要なのは、ランダムな文字列を生成する関数を作成することだけです。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)" ; ?>

于 2012-06-23T16:03:31.057 に答える