CSS の変更と特定の要素の DOM の変更を防ぐためのありとあらゆる方法を見つけようとしています。これが完全に可能ではないこと、または才能のある開発者が回避できることは理解していますが、人々が回避する可能性についてはあまり心配していません。初心者を止めたいだけです。特にjQueryを使っている人。例としては、プロトタイプ オブジェクトなどの特定のプロパティを削除することがあります。
6 に答える
誰かがあなたのJavaScriptやページ内のオブジェクトをいじるのを止めることはできません。ブラウザの設計方法では、ページ内のコードとオブジェクトは単に保護されていません。ブックマークレットから、コンソールで入力されたjavascript、ブラウザプラグインまで、すべてがページやコード、変数を混乱させる可能性があります。それがブラウザのアーキテクチャです。
あなたができることは、物事をもう少し難しくして、いくつかのことにもう少し作業が必要になるようにすることです。ここにあなたができることがいくつかあります:
- コードを難読化/圧縮/最小化すると、コメントの削除、空白の削除、一部の改行の削除、変数名の短縮などが行われます。これにより、誰もが変更を防ぐことはできませんが、理解と理解がより簡単になります。
- 変数をクロージャ内に配置し、グローバルを使用しない。これにより、スクリプトの外部から変数を直接変更することが難しくなります。
- すべての重要なデータと秘密をサーバーに保持します。ajax呼び出しを使用して、重要な情報がブラウザークライアントで使用できないように、そのデータまたはシークレットを使用して操作を実行するようサーバーに要求します。
誰もがDOMを変更できないようにすることはできません。それに対する保護はありません。コードはDOMをチェックし、DOMが非標準的な方法で混乱している場合は操作を拒否できます。ただし、もちろん、コードはそのチェックも削除するように変更されます。
CSS や JavaScript を使用しないでください :p サーバー側のチェックなどに完全に依存します。
しかし、なぜこれが必要なのですか?コードを「保護」したい場合は、JavaScript ミニファイアーを Google Closure Compiler または YUI コンプレッサーとして使用できます。彼らはあなたのスクリプトを書き直し、人間が読むのが難しくなります。今日、Firebug や Grease Monkey のようなツールでは、やりたいことを実行することはほとんど不可能です。
これは可能ですが、JS ファイルを常にサーバーからロードする必要があります。オブザーバーを使用して CSS プロパティをロックし、on DOM remove/add リスナーを使用して親にロックできます。これは、ほとんどの変更を思いとどまらせるのに十分です。
さらに一歩進んで、JavaScript のコア関数を変更すると、JS ファイルをローカルまたはプロキシ経由でロードせずに DOM を変更することはほぼ不可能になります。追加のドメイン チェックを実行して、JS ファイルがロード元となる場所からロードされていることを確認することで、セキュリティをさらに強化できます。
jquery 固有のソリューションを探している場合、大雑把なアプローチでは、jQuery ($) 関数を変更し、提供されたセレクターが保護したい要素と一致しない場合にのみ元の関数に委譲するカスタム関数に置き換える必要があります。
(function(){
jQueryOrig = jQuery;
window.jQuery = window.$ = function(){
if (jQueryOrig("#secure").is(arguments[0])) {
throw new Error("Security breach");
} else return jQueryOrig.apply(this, arguments);
}
}());
もちろん、直接 DOM 操作を使用しているユーザーは影響を受けません。
また、実際に本番コードに任意のサードパーティ コードを含める場合は、ユーザーを JavaScript のサブセットに制限するCaja ( http://code.google.com/p/google-caja/ ) を確認する必要があります。能力。Caja に関する適切な説明は、http: //due-diligence.typepad.com/blog/2008/04/web-20-investor.htmlにあります。
Flash ですべてを作成できます。Chrome では、フラッシュ要素にフォーカスがある場合にユーザーがコンソールを開くことを妨げるバグさえあります (これがどのように機能するかは正確にはわかりませんが、http://www.twist-cube.comまたはhttp :/で例を見ることができます) 。 /www.gotmilk.com )。ユーザーがコンソールを開くことができたとしても (それほど難しいことではありません...)、要素の形状を変更することしかできません。