javascriptファイルを保護するにはどうしたらいいですか?
質問
ソースコードを隠すことは不可能だと思いますが、たとえば、私のCDNからJavaScriptファイルをWebページにリンクする必要があり、このスクリプトの場所や内容を知られたくない場合、これは可能でしょうか。
例えば、ウェブサイトからスクリプトをリンクするために、我々は使用します。
<script type="text/javascript" src="http://somedomain.com/scriptxyz.js">
</script>
さて、スクリプトがどこから来たのかをユーザーから隠したり、スクリプトの内容を隠したり、それでもなおウェブページで使用することは可能でしょうか?
たとえば、ファイルにアクセスするためにパスワードを必要とする私のプライベート CDN にそれを保存することによって、それは動作しますか? そうでない場合、私が望むものを得るために何が有効でしょうか?
どのように解決するのですか?
簡単な答えのある良い質問です。 あなたがすることはできません !
Javascript はクライアントサイドのプログラミング言語であり、クライアントのマシン上で動作するため、実際にはクライアントから何かを隠すことはできません。
あなたのコードを盗まれにくくする方法はいくつかありますが、私が言ったように、何もかもが完璧というわけではありません。
私の頭の中では、コードを埋め込んだページの外から、外部 js ファイルへのアクセスを制限することが 1 つのアイデアです。この場合、もしあなたが
<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ファイルの中身を見ることができるようになりました。
もうひとつの興味深いアイデアは、スクリプトの最後に dom script 要素の内容を削除し、ブラウザがコードを評価した後に、コードが消えるようにすることです。
<script id="erasable" type="text/javascript">
//your code goes here
document.getElementById('erasable').innerHTML = "";
</script>
これらはすべて簡単なハックで、あなたの JavaScript コードを完全に保護することはできませんが、あなたのコードを盗もうとしている人を怒らせることができます。
更新しました。
最近、私は
非常に興味深い記事
によって書かれた
パトリック・ワイド
で、彼はソースコードを画像にエンコードするという別のアプローチを明らかにしました。もちろん、これも確実な方法ではありませんが、もうひとつの
フェンス
を構築することができます。
このアプローチの背後にある考え方は、ほとんどのブラウザが画像のピクセル操作を行うために canvas 要素を使用できることです。また、canvas のピクセルは 4 つの値(rgba)で表されるため、各ピクセルは 0 ~ 255 の範囲の値を持つことができます。つまり、各ピクセルに文字(実際にはアスキーコード)を格納することができます。残りのエンコード/デコードは些細なことです。
ありがとう、パトリック!
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] フォーム送信のようなJavaScriptのポストリクエスト
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptを難読化(保護)するにはどうしたらよいですか?[クローズド]
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] 文字列のn番目の出現箇所を取得するには?
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?