攻撃を防ぐには、デベロッパーは脆弱性を軽減し、アプリケーションにセキュリティ機能を追加する必要があります。幸いなことに、ウェブではブラウザが多くのセキュリティ機能を提供しています。一部はデベロッパーがオプトインできますが、一部はユーザーを保護するためにデフォルトでオンになっています。
「サンドボックス」のアイデア
最新のウェブブラウザは「サンドボックス」という考え方に基づいて構築されています。サンドボックスは、制限された環境でアプリケーションを実行するために使用されるセキュリティ メカニズムです。子供たちが遊び場で境界線内で好きなものを作って遊ぶことができる物理的なサンドボックスと同様に、アプリケーション コードは制限された環境内で自由に実行できます。たとえば、JavaScript はページ上の要素を追加、変更できますが、外部 JSON ファイルへのアクセスが制限されることがあります。これは、同一オリジンというサンドボックス機能によるものです。
サンドボックスが必要な理由
ウェブのユーザーは毎日、任意のコードをダウンロードして、パソコンやスマートフォンで複数回実行しています。「ねえ、このアプリケーションをダウンロードして実行してください」というメッセージが表示されたら、そのアプリケーションが信頼できるソースから提供されているかどうかを考えたり、アプリケーション ベンダーについて調べたり、レビューを注意深く確認したりするでしょう。「このブログ投稿をチェックして」というメッセージとともに URL が送られてきた場合はどうでしょうか?「このサイトはどのような JavaScript をダウンロードするのだろう?」などと疑問に思うことなく、おそらくクリックするでしょう。
ブラウザ サンドボックスは、任意のコードを安全に実行できるようにすることで、ウェブのブラウジングをスムーズにする重要な機能です。
安全性を重視した設計にする
ブラウザが各ウェブ アプリケーションをサンドボックス化している場合、セキュリティについて気にする必要はありますか?答えはイエスです。
まず、サンドボックス機能は完璧なシールドではありません。ブラウザ エンジニアは懸命に作業していますが、ブラウザには脆弱性が存在する可能性があり、攻撃者は常にサンドボックスのバイパスを試みています(Spectre 攻撃など)。
サンドボックスが優れたウェブ エクスペリエンスの作成の妨げになることもありました。たとえば、ブラウザは別のドメインでホストされている画像へのフェッチ リクエストをブロックする場合があります。クロスオリジン リソース シェアリング(CORS)を有効にすると、異なるドメイン間でリソースを共有できますが、慎重に行わないと、ウェブ上の他のすべてのユーザーにリソースが公開され、サンドボックスが事実上無効になります。
まとめ
安全なウェブ エクスペリエンスを実現するには、セキュリティをアプリケーションの設計に組み込む必要があります。強力な設計は、既存の機能を理解することから始まります。次の 2 つのガイドでは、CORS と同一オリジン ポリシーについて詳しく説明します。