Lightning Web セキュリティ入門
学習の目的
この単元を完了すると、次のことができるようになります。
- Lightning Web セキュリティについて説明する。
- Lightning Web セキュリティの利点を挙げる。
Lightning Web セキュリティとは?
システム管理者や開発者が新しい機能を組織に追加するとき、組織のセキュリティは最優先事項です。Salesforce または AppExchange からの事前作成済みコンポーネントにもカスタムコンポーネントにも、組織が危険なコードによって侵害されるリスクが伴います。
とはいえ、セキュリティのためにパフォーマンスや機能を制限することも望ましくありません。そこで組織の安全を確保するために作成されたのが Lightning Web セキュリティ (LWS) です。LWS を使用すると、新しい Lightning コンポーネントのユースケースを通じて機能が向上します。ただし、LWS について詳しく学習する前に、その前身である Lightning Locker について簡単に見ていきましょう。
Lightning Locker
すでに Lightning コンポーネントを使用している方は Lightning Locker のことをよくご存知だと思います。Lightning Locker は Lightning Web コンポーネントと Aura コンポーネントを安全に保つための標準で、そのために、Lightning コンポーネントの名前空間をそれぞれのコンテナ内に分離し、コーディングのベストプラクティスを適用しています。たとえば、c-editor
というコンポーネントは c 名前空間のものであるため、ltngmu
名前空間のコンポーネントからは分離されています。
Lightning Locker は今すぐ廃止されるわけではありません。カスタム Lightning Web コンポーネントとカスタム Aura コンポーネントが含まれていない組織では、Lightning Web コンポーネント用 LWS (正式リリース) と Aura コンポーネント用 LWS (ベータ) がデフォルトで有効になります。この有効化により、Spring '22 に発表された LWS アーキテクチャの段階的なロールアウトが継続されます。Lightning Web セキュリティは、コンポーネントのセキュリティとパフォーマンスに今後使用されるものです。LWS に早く移行できれば、それだけ組織の安全性と処理速度が向上します。
次世代 - Lightning Web セキュリティ
Lightning Web セキュリティは Lightning コンポーネント界のニューフェースです。Lightning コンポーネントを使用している方はご存知のとおり、Salesforce ページには任意の数の他社からのコンポーネントを含めることができます。独自のカスタムコンポーネントは Salesforce が作成したコンポーネントや自分が開発または使用する AppExchange のアプリケーション内のコンポーネントと共存します。
静的リソースから読み込まれるサードパーティライブラリを含むさまざまなソースからの多くのコンポーネントが環境内に存在することは、潜在的な脅威につながります。コンポーネント内の悪意あるコードがウィンドウ、ドキュメント、要素などのグローバルオブジェクトにアクセスし、リソースやデータを取得し、組織全体に被害を与える可能性があります。
JavaScript Sandbox によるセキュリティ
Lightning Web セキュリティのアーキテクチャは、環境内で各コンポーネントを名前空間専用の JavaScript Sandbox に分離することによって機能します。1 つのコンポーネントからの危険なコードは、その名前空間外の他のコンポーネントのリソースにはアクセスできません。
Lightning Web セキュリティのユースケース
Lightning Locker と Lightning Web セキュリティのどちらも、安全でない API の動作をブロックまたは変更しますが、LWS は次のような使用が可能であるためパフォーマンスとセキュリティがさらに向上します。
クロス名前空間コンポーネントの使用
Lightning Web コンポーネントで異なる名前空間からコンポーネントやモジュールをインポートして、コンポジションや拡張機能を介して使用できます。コンポーネントはそれぞれの名前空間 JavaScript Sandbox に透過的に分離されています。ユーザーはこれが行われることに気付くこともありません。
グローバルオブジェクトとのインタラクション
Lightning Locker ではコンポーネントを分離するためにセキュアなラッパーが必要ですが、そのためにパフォーマンスが制限され、一部のサードパーティライブラリを使用できません。Lightning Web セキュリティでは、安全でないコードが検出されたコンポーネントの動作をブロックまたは変更することによって、セキュアなラッパーが不要になります。これはコードが存在する Sandbox 内で実行されるため、問題が発生することはありません。これによって、コンポーネント内でサードパーティライブラリをより自由で柔軟に使用できます。
iframe コンテンツと ID へのアクセス
Lightning Web セキュリティでは Lightning Web コンポーネントから iframe 要素のコンテンツへのアクセスが許可されるため、Lightning Locker によってブロックされていた他の Web 開発機能を使用できます。
パフォーマンスの向上
セキュアなラッパーが必要ないため、名前空間 JavaScript Sandbox 内のコードの実行が速くなります。
サードパーティ JavaScript ライブラリのサポートの向上
LWS では、ライブラリはそれぞれの名前空間 JavaScript Sandbox 内で実行されるため、ライブラリによってグローバルオブジェクトの操作などを実行できます。グローバルオブジェクトに対する変更は、他の名前空間のコンポーネントには影響しません。
Lightning Web セキュリティは JavaScript と共に進化
LWS はブラウザープラットフォームと共に進化する最新の TC39 標準に沿ってモデル化されているため、テクノロジーが変化しても古くなることはありません。
次の単元では、Lightning Web セキュリティのしくみについて掘り下げ、LWS によって影響を受けるコンポーネントがあるかどうかを判断する方法や組織内で LWS を有効にする方法を学習します。