JavaScriptファイルを保護するにはどうすればよいですか?
-
16-10-2019 - |
質問
ソースコードを非表示にすることは不可能であることはわかっていますが、たとえば、JavaScriptファイルを自分のCDNからWebページにリンクする必要があり、このスクリプトの場所やコンテンツを人々に知らせたくない場合は、これは可能?
たとえば、Webサイトからスクリプトをリンクするには、以下を使用します。
<script type="text/javascript" src="http://somedomain.com/scriptxyz.js">
</script>
ここで、スクリプトの出身地のユーザーから隠すことができますか、それともスクリプトのコンテンツを非表示にして、それでもWebページで使用できますか?
たとえば、ファイルにアクセスするためにパスワードが必要なプライベートCDNに保存することにより、それは機能しますか?そうでない場合、私が欲しいものを手に入れるために何が機能しますか?
解決
簡単な答えで良い質問: できません!
JavaScriptはクライアント側のプログラミング言語であるため、クライアントのマシンで動作するため、実際にクライアントから何も隠すことはできません。
コードを難読化するだけでは良い解決策ですが、それだけでは不十分です。なぜなら、それは難しいですが、誰かがあなたのコードを解読してスクリプトを「盗む」ことができるからです。
あなたのコードを盗まれるのを難しくする方法はいくつかありますが、私が言ったように、何も防弾ではありません。
私の頭の上から外れているアイデアの1つは、コードを埋め込んだページの外側から外部JSファイルへのアクセスを制限することです。その場合、あなたが持っている場合は
<script type="text/javascript" src="myJs.js"></script>
そして、誰かがアクセスしようとします myjs.js ブラウザにファイルを使用して、スクリプトソースへのアクセスを許可されるべきではありません。
たとえば、ページがPHPで書かれている場合、スクリプトを介して含めることができます include
機能し、スクリプトにそれがあるかどうかを決定させます 安全な「それを返すためにソースです。
この例では、外部「JS」(PHPで書かれている)ファイルが必要です myjs.php :
<?php
$URL = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
if ($URL != "my-domain.com/my-page.php")
die("/\*sry, no acces rights\*/");
?>
// your obfuscated script goes here
それはあなたのメインページに含まれます my-page.php :
<script type="text/javascript">
<?php include "myJs.php"; ?>;
</script>
これにより、ブラウザのみがJSファイルの内容を見ることができました。
もう1つの興味深いアイデアは、スクリプトの最後に、DOMスクリプト要素の内容を削除するため、ブラウザがコードを評価した後、コードが消えるようにすることです。
<script id="erasable" type="text/javascript">
//your code goes here
document.getElementById('erasable').innerHTML = "";
</script>
これらはすべて、できない単純なハッキングであり、これを十分に強調することはできません。JSコードを完全に保護することはできませんが、コードを「盗み」しようとしている人を怒らせることができます。
アップデート:
私は最近出会いました 非常に興味深い記事 によって書かれた パトリック・ワイド JSコードを非表示にする方法について、彼は別のアプローチを明らかにします。ソースコードを画像にエンコードできます!確かに、それも弾丸の証拠ではありませんが、それは別のものです フェンス コードを中心に構築できること。
このアプローチの背後にあるアイデアは、ほとんどのブラウザーがCanvas要素を使用して画像でピクセル操作を行うことができるということです。また、Canvas Pixelは4つの値(RGBA)で表されるため、各ピクセルは0〜255の範囲に値を持つことができます。つまり、すべてのピクセルに文字(実際にはASCIIコード)を保存できます。エンコード/デコードの残りの部分は些細なものです。
ありがとう、パトリック!
他のヒント
あなたができる唯一のことはです 難読化 読みにくくするためのコード。何をしても、JavaScriptをブラウザで実行したい場合は、コードが必要です。
これを読む. 。 FireBugなどのビューソースとデバッグツールの両方にコードを隠す非常に優れた方法があります。
私の知識から、これは不可能です。
ブラウザは、それらを実行できるようにJSファイルにアクセスする必要があります。ブラウザにアクセスできる場合、ブラウザのユーザーもアクセスできます。
パスワードがJSファイルを保護する場合、ブラウザはそれらにアクセスすることができず、そもそもJSを使用するという目的を打ち負かします。
私の頭のすぐ上で、このようなことをすることができます(サーバー側のスクリプトを作成できれば、できるように聞こえます):
スクリプトを通常のようにロードする代わりに、AJAXリクエストをPHPページに送信します(何でもかまいません。自分で使用するだけです)。 PHPにファイルを見つけてもらう(おそらくサーバーの非公開部分)、で開きます file_get_contents
, 、そして戻ります(読む: echo
)文字列としての内容。
この文字列がJavaScriptに戻ったら、新しいものを作成してもらいます script
タグ、それを入力します innerHTML
受信したコードを使用して、タグをページに添付します。 (君 そうかもしれない これに問題があります。 innerHTML
必要なものではないかもしれませんが、実験できます。)
これをたくさん行うと、スクリプトの名前でGET変数を受け入れるPHPページを設定して、同じPHPを使用して異なるスクリプトを動的につかむことができます。 (代わりに投稿を使用して、他の人があなたがしていることを見るのを少し難しくすることができます。私は知りません。)
編集: 私はあなたが隠そうとしているだけだと思った 位置 スクリプトの。スクリプト自体を非表示にしようとしている場合、これは明らかに役に立たないでしょう。
Googleクロージャーコンパイラ, Yuiコンプレッサー, 削除します, /packer/...などは、JSコードを圧縮/難読化するオプションです。しかし、それらのどれも、ユーザーからコードを隠すのを助けることはできません。
まともな知識を持っている人なら誰でも、次のようなツールを使用してコードを簡単にデコード/解体することができます JS Beautifier. 。あなたはそれに名前を付けます。
答えは、いつでもコードを読み取り/デコードしにくくすることができるということですが、隠す方法は確かです。
唯一の方法は、必要なデータをサーバーに配置し、ログインしたユーザーのみが必要に応じてデータにアクセスできるようにすることだと思います(計算サーバー側を作成することもできます)。これにより、JavaScriptコードは保護されませんが、サーバーサイドコードなしでは手術不能にします
コメントで言ったように、私は前にGion_13の答えに残しました(読んでください)、あなたは本当にできません。 JavaScriptではありません。
コードを利用可能にしたくない場合(=多大な努力なしで盗むことができます)、私の提案は、サーバーであるPHP(ASP、Python、Perl、Ruby、JSP + Java-Servlets)を使用することです。 -sideおよびComputation/code実行の結果のみがユーザーに提供されます。または、必要に応じて、クライアント側の計算/コードの実行を可能にしますが、コンパイルされているため、リバースエンジンが難しくなっているため、フラッシュまたはJavaアプリットでもあります(このように不可能ではありません)。
ちょうど私の2セント。