この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

セキュアなコード記述のための LockerService ルール

LockerService は、Lightning コンポーネントのための強力なセキュリティアーキテクチャです。LockerService では、個々の Lightning コンポーネントが各自のコンテナで分離されるためセキュリティが向上します。また、LockerService では、コードのサポート機能が向上するベストプラクティスが促進されます。これは、サポートされる API へのアクセスのみを許可し、公開されていないフレームワーク内部へのアクセスを排除することで実現します。

LockerService 要件

LockerService は、コードのいくつかのセキュリティ機能を適用します。
JavaScript ES5 の厳格モードの適用
JavaScript ES5 の厳格モードが暗黙的に有効になります。コードで "use strict" を指定する必要がありません。var キーワードを使用した変数の宣言や、JavaScript コーディングのその他のベストプラクティスなどが適用されます。コンポーネントが使用するライブラリも厳格モードで動作する必要があります。
DOM のアクセスコンテインメント
コンポーネントは、DOM をトラバースし、このコンポーネントによって作成された要素のみにアクセスできます。この動作により、アンチパターンが、他のコンポーネントが所有する DOM 要素に到達できなくなります。
グローバル参照の制限
LockerService はグローバル参照に制限を適用します。Array など、組み込みオブジェクトにはアクセスできます。window など、組み込み以外のオブジェクトは LockerService がセキュアなバージョンを用意します。オブジェクトのこのセキュアなバージョンが、オブジェクトおよびそのプロパティへのアクセスを自動的かつシームレスに制御します。
Salesforce Lightning CLI ツールを使用して、コードをスキャンし、Lightning 固有の問題がないか調べます。
サポートされている JavaScript API フレームワークのメソッドのみへのアクセス
サポートされている公開済みの JavaScript API フレームワークのメソッドにのみアクセスできます。これらのメソッドは、https://yourDomain.lightning.force.com/auradocs/reference.app にあるリファレンスドキュメントアプリケーションで公開されています。以前はサポートされていないメソッドにアクセスできたため、サポートされていないメソッドが変更または削除されたときにコードが破損するおそれがありました。

上記のセキュリティ機能は、LockerService が組織内で有効である場合に適用されます。LockerService は、今回のリリースの重要な更新です。LockerService は、Spring ’17 リリースのすべての組織に対して自動的に有効化されます。Spring ’17 リリースの前は、更新の有効化および無効化を必要に応じて手動で何度でも行って組織への影響を評価することができます。

今後のリリースでは、追加のセキュリティ機能が含まれるように LockerService が拡張されます。
コンテンツセキュリティポリシー (CSP) の厳格化
LockerService は CSP を強化し、インラインスクリプト (script-src) の unsafe-inline および unsafe-eval キーワードを禁止する方法でクロスサイトスクリプティング攻撃の可能性を排除します。コード内でのこれらのキーワードの使用を排除し、サードパーティライブラリを unsafe-inlineunsafe-eval に依存しない最近のバージョンに更新することをお勧めします。

IE11 では CSP がサポートされていないため、サポートされている他のブラウザを使用してセキュリティを強化することをお勧めします。

メモ

これらの CSP 変更は現在 LockerService で適用されませんが、事前に計画する価値があります。Salesforce Lightning CLI ツールは、LockerService により本日適用された問題だけでなく、本日適用されなかった問題も報告しますが、これらの問題は今後適用される予定です。

instanceof は使用不可

LockerService が有効の場合は、複数のウィンドウまたはフレームが存在する可能性があるため、instanceof 演算子の信頼性が低下します。変数種別を判断する場合は、代わりに typeof を使用するか、JavaScript の標準メソッド (Array.isArray() など) を使用します。

重要な更新の有効化

LockerService は、今回のリリースの重要な更新です。LockerService は、Spring ’17 リリースのすべての組織に対して自動的に有効化されます。Spring ’17 リリースの前は、更新の有効化および無効化を必要に応じて手動で何度でも行って組織への影響を評価することができます。

この重要な更新を有効化する手順は、次のとおりです。

  1. [設定] から、[クイック検索] ボックスに「重要な更新」と入力して、[重要な更新] を選択します。
  2. [Lightning LockerService セキュリティの有効化] の [有効化] をクリックします。
  3. ブラウザページを更新して、LockerService の有効化に進みます。

次の組織では LockerService が自動的に有効になっています。

  • Summer '16 リリース以降に作成される新規組織
  • カスタム Lightning コンポーネントのないすべての既存の組織

組織にこの重要な更新が表示されない場合は、LockerService が自動的に有効になっており、無効にできません。有効化は、リリース後 24 時間以内に自動的に行われます。

Summer '16 リリース以降に作成された Developer Edition 組織では LockerService を無効にできます。LockerService を Developer Edition 組織でテストして、コンポーネントが正しく動作することを確認してから本番組織で有効にすることをお勧めします。

メモ

管理パッケージからインストールされたコンポーネント

重要な更新が表示されない場合、このリリースでは管理パッケージからインストールされたコンポーネントに例外が適用されます。これらのコンポーネントは LockerService の制限が適用されずに引き続き実行されます。

重要な更新が表示されない場合、組織で作成したコンポーネントは LockerService の制限が適用された状態で実行されます。組織で作成されたコンポーネントは、デフォルトの名前空間 c または組織の名前空間 (名前空間を作成している場合) にあります。

この例外が適用されるのはこのリリースのみです。LockerService がすべての組織で有効になっていると、すべての Lightning コンポーネントで適用されます。

次の表に、LockerService が適用される状況がまとめられています。

コンポーネントのソース 重要な更新が表示されているが有効化されていない 重要な更新が表示されていて有効化されている 重要な更新が表示されていない
管理パッケージ × ×
組織で作成 ×