web-dev-qa-db-ja.com

JavaScriptソースコードを隠す

Webアプリでは、ソースを表示しないなど、可能な限り多くのコードを非表示にするよう努力する必要がありますか?特に、JavaScript、特にAjaxで使用されるJavaScriptを非表示にする必要があるのか​​と思っていました。 JavaScriptが外部ファイルである場合、そのファイルはWebサーバー上にないか、.htaccessを使用して制限できないと考えていました

編集:JavaScriptが最後に解釈されるため、JavaScriptが完全に表示されないようにすることはできません。しかし、私は、たとえばwww.mywebsite.com/how_login_is_done.jsを単に入力するよりも少し難しくするなど、そのようなコードを表示しないようにすることに意味があるのではないかと思っていました。

10
Celeritas

JavaScriptコードはクライアントブラウザー上で実行されるため、クライアントブラウザーはコードを認識し、すべてのユーザーがコードを取得できます。せいぜい コードを難読化 して、その意味と動作を隠す(試す)ことができます。難読化は、やる気のある攻撃者を阻止しないため(攻撃者を少し怒らせるだけです)、セキュリティモデルの基盤として使用するのはまったく賢明ではありません。

コードを非表示にする場合は、コードを攻撃者のマシンに送信しないでください。サーバー側に置いておきます。

41
Tom Leek

クライアントの動作を強制できないため、これは不可能です。クライアントが行う要求はすべて、TamperDataまたはBURPを使用して傍受および操作できます。クライアントで実行されているJSはすべて、FireBugを使用してデバッグできます。

私は、一部の開発者が(in) セキュリティはあいまい のパスをたどるのを見てきました。これは、完全に回避する必要がある慎重に設計された脆弱性であると考えています。

16
rook

まず、実行する可能性のあるサーバー側のjavascript(たとえば、ウェブサーバーが node.js の場合)は、訪問者に対して非表示にする必要があります。クライアント側のJavaScriptは、ユーザーがブラウザで実行するためにダウンロードする必要があり、非表示にすることはできません。あなたは/ glify あなたのコードを縮小することができます、そしてあなたが望むなら、そしてあなたは元の縮小されていないバージョンも提供することを強いられて感じるべきではありません。ただし、マシンには完全に機能する縮小コードがまだあります。主な違いは、縮小バージョンには、人間が解析できる便利な説明的な名前がなくなったことです。これにより、クライアント側のロジックのステップ実行が少し難しくなりますが、最新のブラウザーにJSデバッガーが組み込まれているため、比較的簡単に実行できます。

結論:クライアント側のjavascriptが秘密であると想定したり、それらに依存したりすることはできません。ブラウザによって実行されます。

11
dr jimbob

オプション:

  • ユーザーがWebサイトにログインした後、クライアント側の限定JavaScriptコードをロードします。
  • それでも認証されたユーザーにJSコードを表示させたくない場合は、サーバーで実行されている別のJSファイルを呼び出すJSをクライアントにロードするか、WebAPIなどのサービスを呼び出します。もちろん、おそらくHTTPを使用して通信チャネルを保護したいとします。
0
H A

Yuiコンプレッサーは人間の可読性を難しくしていませんか?いずれにせよ、クライアント側だけで検証を行うべきではありません。何の意味でもクライアントサーバーとは呼ばれないので、サーバーにほとんどの作業を任せてください。覚えておくべきことは、World Wide Webがエンドポイントに対して不透明であるように意図されていなかったことです。そのモニカはネイティブアプリケーションに属しています。

0
mincewind