セキュアなコード記述のための 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 リリースの前は、更新の有効化および無効化を必要に応じて手動で何度でも行って組織への影響を評価することができます。
これらの CSP 変更は現在 LockerService で適用されませんが、事前に計画する価値があります。Salesforce Lightning CLI ツールは、LockerService により本日適用された問題だけでなく、本日適用されなかった問題も報告しますが、これらの問題は今後適用される予定です。
instanceof は使用不可
LockerService が有効の場合は、複数のウィンドウまたはフレームが存在する可能性があるため、instanceof 演算子の信頼性が低下します。変数種別を判断する場合は、代わりに typeof を使用するか、JavaScript の標準メソッド (Array.isArray() など) を使用します。
重要な更新の有効化
LockerService は、今回のリリースの重要な更新です。LockerService は、Spring ’17 リリースのすべての組織に対して自動的に有効化されます。Spring ’17 リリースの前は、更新の有効化および無効化を必要に応じて手動で何度でも行って組織への影響を評価することができます。
この重要な更新を有効化する手順は、次のとおりです。
- [設定] から、[クイック検索] ボックスに「重要な更新」と入力して、[重要な更新] を選択します。
- [Lightning LockerService セキュリティの有効化] の [有効化] をクリックします。
- ブラウザページを更新して、LockerService の有効化に進みます。
管理パッケージからインストールされたコンポーネント
重要な更新が表示されない場合、このリリースでは管理パッケージからインストールされたコンポーネントに例外が適用されます。これらのコンポーネントは LockerService の制限が適用されずに引き続き実行されます。
重要な更新が表示されない場合、組織で作成したコンポーネントは LockerService の制限が適用された状態で実行されます。組織で作成されたコンポーネントは、デフォルトの名前空間 c または組織の名前空間 (名前空間を作成している場合) にあります。
この例外が適用されるのはこのリリースのみです。LockerService がすべての組織で有効になっていると、すべての Lightning コンポーネントで適用されます。
次の表に、LockerService が適用される状況がまとめられています。
| コンポーネントのソース | 重要な更新が表示されているが有効化されていない | 重要な更新が表示されていて有効化されている | 重要な更新が表示されていない |
|---|---|---|---|
| 管理パッケージ | × | ○ | × |
| 組織で作成 | × | ○ | ○ |