ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript クライアント アプリを保護する方法

JavaScript クライアント アプリを保護する方法

伊谢尔伦
伊谢尔伦オリジナル
2016-11-21 13:17:161106ブラウズ

JavaScriptなどのクライアントサイド技術には多くの便利な機能があり、そのため世界で最も人気のある言語の1つになりました。これには多くの利点があり、即時解析もその 1 つです。インスタント解析には、ブラウザでコードをダウンロードしてすぐに実行できるなど、多くの利点があります。しかし、大きな自由には大きな責任が伴います。

この記事ではJavaScriptのセキュリティリスクを詳しく掘り下げていきますが、その範囲はブラウザ内で実行されるフロントエンドコードに限定されています。今後作成される他のタイプも検討していきます。

ここで想像力を働かせてください。ブラウザは常にコードを実行する必要があり、最初にページをダウンロードして解析します。ブラウザにはダウンロードと解析を同時に行う機能があるため、すべてがダウンロードされるまで待つ必要はありません。では、JavaScript に遭遇すると何が起こるのでしょうか?

JavaScript はレンダリングをブロックしますが、これは実行時に大きな利点となります。ただし、これは、JavaScript の実行が終了するまでブラウザが解析を停止することを意味します。この機能により、このプログラミング言語に大きな柔軟性が与えられ、任意の数のコードを開くことができます。

しかし問題は、この機能がどのような影響をもたらすかということです

デバッグと改ざん

たとえば、次のコードセグメントを見てください:

<div id="hack-target"></div>
<button>Set Value</button>
<script>
  document.querySelector(&#39;button&#39;).addEventListener(&#39;click&#39;, setValue);
  function setValue() {
    var value = &#39;2&#39;;
    document.getElementById(&#39;hack-target&#39;).innerText = value;
  }</script>


このコードは、HTMLバインディングイベントです。ボタンをクリックすると、コールバックがトリガーされます。


クライアントサイドJavaScriptの場合、値を設定する場所にブレークポイントを設定できます。イベントが発生すると、このブレークポイントがヒットします。 var value = '2'; は値の設定に使用され、変更できます。デバッガーはここで一時停止し、ページの改ざんを許可します。この機能は非常に便利で、この機能が発生してもブラウザはフラグを立てません。

デバッガーはコードの実行を一時停止したため、レンダリングも一時停止しました。デバッガー自体はブラウザーが提供するツールの 1 つであり、誰でも使用できます。これはWeb Developer Tools(開発者ツール)です。

この技術の応用はCode Penで見ることができます。この機能のスクリーンショットは次のとおりです (写真はどこにありますか?):

この機能は JavaScript のデバッグに非常に便利ですが、安全性はどの程度ですか?

この機能は、攻撃者が実行時に JavaScript を変更できることを意味します。攻撃者はブレークポイントを介して一時的に実行し、DOM を変更して任意の JavaScript コードをコンソールに入力する可能性があります。このような機能は、クライアント側の脆弱性を悪用し、データを変更し、セッションをサポートし、JavaScript を使用してページ内に任意の変更を加える可能性があります。

たとえば、開発者ツールを開いてコンソールページに入り、次のように入力します:

document.querySelector(&#39;button&#39;)
        .addEventListener(&#39;click&#39;, function () { 
            alert(&#39;sacked&#39;);
        });`


次回このイベントがトリガーされると、変更された JavaScript コードが実行されます。

なぜ JavaScript なのか?

それはどこから来たのかと疑問に思うかもしれませんが、1995 年に Netscape が JavaScript をリリースしたとき、新しい言語は Web の「接着言語」になりました。

Netscape が JavaScript 標準を Ecma 国際機関に提出した後、そのバージョンが標準となり、ECMAScript としても知られています。 ECMAScript は標準であるため、異なるブラウザを使用するときに競合が発生しないように、どのブラウザもこの標準をサポートする必要があります。つまり、Google Chrome 用のコードを作成できますが、そのコードは Opera、NetScape、Internet Explorer、および Microsoft Edge でも実行できます。 JavaScript は柔軟な環境で作成されており、やりたいことを実現できる力を持っています。これらの設計原則により、JavaScript に自然な動的なセンスが与えられ、JavaScript がブラウザーの言語になります。

これはすべて歴史ですが、それは JavaScript のセキュリティと何の関係があるのでしょうか?

クライアント側のセキュリティ

悪意のある JavaScript コードから保護するための最良のオプションは、ランタイム保護を追加することです。 Runtime Application Self-Protection (RASP) は、実行時にクライアント コードを保護します。 Web がより柔軟かつ動的になり、攻撃者がクライアント側の JavaScript を介して攻撃を実行できるようになるにつれて、ランタイム セキュリティが必要になります。

RASP は、クライアント アプリケーションを保護するための最も効果的な方法であり、次のように要約されます。

ランタイム プログラムの自己保護は、アプリケーションまたはその実行環境を作成またはリンクし、アプリケーションの実際の実行を検出して制御するセキュリティ テクノロジです。タイムアタック。

ブラウザで JavaScript が実行されると、それを完全に保護することはできません。 RASP は、アプリケーションをオフラインで変更する攻撃など、実行時に発生する高レベルのコード改ざん攻撃から保護します。優れた RASP ソリューションは、攻撃者がソリューション自体を改ざんしたり、ソリューションを直接バイパスしたりできないように、独自のコードも保護します。これらの保護層により、オープン ネットワークのセキュリティが確保されます。

RASPが適切であれば、攻撃者がコードをブロックしようとすると通知するため、ユーザーはそれを知り、ユーザーのセッションのキャンセルなどのアクションを実行できます。

Jscrambler は、アプリケーションをランタイム攻撃から保護するための RASP ソリューションを提供します。自身を防御し、改ざんを検出します。その自己防衛機能により、JavaScript アプリケーションの保護が有効になります。 Jscrambler は、よく知られたアプリケーション保護概念であるデバッグ防止および改ざん防止技術を使用して、JavaScript の現実と制限を明確にします。アンチデバッグ機能は、デバッグ ツール (DevTools、Firebug など) の使用を検出し、リバース エンジニアリングによるアプリケーションのデバッグの使用を防止します。これには、デバッガーの動作を停止し、スタックを増大させ、ユーザーがアプリケーションの制御フローを調査するのを妨げる、いくつかのプリセット コード トラップが含まれています。改ざん防止機能はコードの変更をチェックし、対応します。たとえば、自動防御によって保護されている関数内でセミコロンを追加または削除すると、その変更が検出され、コードの実行が停止されます。どちらの技術もコードの難読化と組み合わせることで、アプリケーションの改ざんが不可能になります。

結論

JavaScriptのセキュリティを実装するには、実行時に何が起こるかを考慮する必要があります。これは本質的に、Web の柔軟性を考慮して構築された動的言語です。これは両刃の剣であり、使用する場合は正当な責任を負う必要があります。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。