翻訳者から:プログラマおよびソフトウェアアーキテクトのジムメドロックによる記事を公開しています。 Medlockは、アプリケーションまたはWebサービスを保護する基本的な方法について説明します。 この資料は、初心者プログラマーにとって有用である可能性が高いことに注意してください。 プロがコメントを残す場合、誰もが感謝しますが。
なぜアプリをハッキングする人を悩ますのですか? はい、それは時間の経過とともにこれをやりたい人がますます増えているからです。 これらは、誰かの保護を克服することがスポーツの関心事である「普通の」ハッカー、利益のためにサービスやサイトを破壊するサイバー犯罪者、政府機関です。
過去数か月にわたって、多くの大規模な組織は、情報の大きな漏洩後にニュースをヒットさせました。 その中で、Facebookとその5,000万の盗まれたアカウント、3.4 TBのデータと7000万のドキュメントを持つFIFA、50万のアカウントを持つGoogle、ネットワーク全体の4億2,700万の顧客からのデータを持つMarriott Hotels。
Skillboxの推奨事項: 2年間の実践コース「私はPRO Web開発者です。 」
「Habr」の読者には、「Habr」プロモーションコードを使用してSkillboxコースに登録すると10,000ルーブルの割引があります。
出所
ハッカー攻撃の数が増えているだけでなく、サイバー犯罪者が受ける被害の量も増えています。 専門家によると、サイバー犯罪者によって引き起こされる直接的および間接的な損失の平均規模は、ハッキングが成功するごとに386万ドルです。 もちろん、これは市場の平均です。 実数はさまざまであり、ほとんど同じです。
いくつかの統計。 サイバー犯罪者による損害は、次のデータで判断できます。
- 148ドル-盗まれたアカウントの「価格」。
- 4,000万ドル-100万アカウント
- 3億5,000万ドル-5000万アカウント。
お金だけが議論ではありません。すべてを整理するのにどれくらい時間がかかるかを考えてください。
インフラストラクチャセキュリティと アプリケーションセキュリティ
ほとんどのセキュリティ対策は、サーバー、ストレージ、データセンターなどのITインフラストラクチャの基盤を保護することを目的としています。 必要ですが、保護する必要があるのはそれらだけではありません。
アプリケーション自体に関するセキュリティ対策も非常に重要です。 これらは、ソフトウェアの抜け穴の悪用を発見、修正、防止するための一連の方法を提供します。 これらを強調する価値があります:
- サイバーセキュリティの点で問題のある場所を検索することが目的である場合、情報セキュリティの専門家が実施するコードレビュー。
- アプリケーションでの作業に基づくブラックボックスベースの監査。
- コードの大部分を記述する前にアプリケーションアーキテクチャをレビューする。
- 保護の評価に役立つ自動ツールの使用。
- サードパーティの専門家が問題領域を見つけることを可能にする報奨金プログラムの開始。
最も効果的な対策は、レイヤーごとのセキュリティの概念に基づいています。 この場合、各保護要素は独自のツールセットを使用します。
クライアント側では何もできません
問題は、ユーザー側でプロジェクトを保護できない可能性があることです。 最近のブラウザは、作成者の努力にもかかわらず脆弱です。
Webサービスの場合、システム全体の弱いコンポーネントが承認に必要なキーです。 たとえば、GitHub APIを使用するアプリケーションは、トークン認証をサポートする必要があります。 犯罪者が自分の手で鍵を入手できる場合、彼はGitHubで被害者のコードとプロジェクトにすべてアクセスできます。
フロントエンド開発者にとって危険なのは、秘密鍵やトークンなどの手段が提供されていれば、サービスの完全なセキュリティを確保できることです。 これはすべて良いことですが、同じブラウザーはすべて弱いリンクです。
キーなどのセキュリティデータをプロジェクト全体から分離することは、どのくらい安全ですか?
通常、環境変数は、.envなどのデータをファイルに抽出するために使用されます。 追加の手順は、そのようなファイルの名前を.gitignoreに追加することです。これにより、パブリックリポジトリにアップロードするためのgit pushコマンドの実行が防止され、ファイルは全員に開かれます。
これはすべて良いことですが、.envファイルは暗号化されていません。 React Appの作成の場合、ブラウザのbuild / static / jsディレクトリにあるDeveloper Toolsオプションを使用してチェックできます。 たとえば、0.chunk.jsを調べると、次のようになります。
ご覧のとおり、このアプローチには特別な利点はありません;場合によっては、重要なセキュリティ要素をソースコードに保存した方が良い場合があります。 ユーザーがアプリケーションを認証するまで、環境変数を含むスクリプトのロードを遅らせるためにコード分離が使用される、別の魅力的なシナリオがあります。 しかし、クライアントコンピューターが侵害された場合、何も機能しません。結局、侵入者はファイルシステムにアクセスできます。
解決策
クライアント部分とは異なり、重要なデータが攻撃者の手に渡らないように、サーバーアプリケーションを保護できます。 これを行うには、Oauthを使用して、追加レベルの認証とアクセス制御、暗号化、およびHTTPSやTLSなどのプロトコルを取得できます。
アプリケーションの秘密のジレンマは、サーバー側のAPIを実装することで解決できます。 同時に、クライアントアプリケーションを使用するサービスプロバイダーから分離するプロキシサーバーとして機能します。 クライアント側でプライベートデータを使用してサービスで認証する代わりに、APIはサーバーアプリケーションから認証し、リクエストを実行してから、結果をクライアントに返します。 秘密鍵またはその他のデータは、いかなる状況でも後者に開示されません。
統合アプローチ
はい、複雑さは言葉だけではありません。 ユーザーのデータの信頼性の高い保護に自信を持たせるには、綿密な計画、綿密な保護と詳細への注意に基づく綿密なセキュリティ戦略が必要です。
「テクノロジーアイランド」に頼るだけでは十分ではありません。 システム全体がどのように機能するかを理解し、すべての要素を一緒に接続する必要があります。
この場合にのみ、アプリケーションまたはサービスが安全になります。
- オンラインコース「Profession frontend-developer」 。
- 実用的な年次コース「PHP開発者0からPRO」 。
- オンラインコース専門職「Web開発者」 。