Lightning コンポーネントでの不十分なエスケープ
バンドル内の各コンポーネントは、親コンポーネントやアプリケーションによって提供された入力、または URL パラメータで提供された入力をサニタイズする責任があります。
個々のコンポーネントのセキュリティ境界は、コンポーネントバンドルです。バンドル内の各コンポーネントは、親コンポーネントやアプリケーションによって提供された入力、または URL パラメータで提供された入力をサニタイズする責任があります。onInit ハンドラでサニタイズしていない場合、公開コンポーネントまたはグループコンポーネントの属性には、攻撃者が制御する入力が含まれていることが考えられます。
入力をサニタイズしないと、クロスサイトスクリプト (XSS) 攻撃や URL リダイレクト攻撃を受ける可能性があります。
Aura の例
次の Aura コードの場合、コンポーネントは、グローバル属性のデータを参照し、エスケープが十分でない状態でそのデータをドキュメントオブジェクトモデル (DOM) に提供します。1 つのパラメータに、悪用されやすいタグ unescapedHTML があります。ハッカーやマルウェアは、HTML または JavaScript をビューに挿入して、クロスサイトスクリプト (XSS) 攻撃をトリガすることができます。
1<aura:component controller="name_NewsController" access="global" extends="c:name_Name" implements="force:appHostable,flexipage:availableForAllPageTypes,forceCommunity:availableForAllPageTypes">
2 <aura:handler name="baseReady" event="c:name_Name" action="{!c.doInit}"/>
3 ...
4 <aura:attribute name="newsDetails" type="String" default="" access="global"/>
5 ...
6 <div class="slds-col_padded slds-size_1-of-1 textDetail">
7 <div class="slds-text-longform">
8 <aura:unescapedHtml aura:Id="newsDetail" value="{!v.newsDetails}"/>
9 </div>
10 </div>
11 ...
12</aura:component>次の Aura コンポーネントコードは、unescapedHTML を使用していないため安全です。
1<aura:component controller="name_NewsController" access="global" extends="c:name_Name" implements="force:appHostable,flexipage:availableForAllPageTypes,forceCommunity:availableForAllPageTypes">
2 <aura:handler name="baseReady" event="c:name_Name" action="{!c.doInit}"/>
3 ...
4 <aura:attribute name="newsDetails" type="String" default="" access="global"/>
5 ...
6 <div class="slds-col_padded slds-size_1-of-1 textDetail">
7 <div class="slds-text-longform">
8 <aura:Id="newsDetail" value="{!v.newsDetails}"/>
9 </div>
10 </div>
11 ...
12</aura:component>詳細は、『Secure Coding Guide (セキュアなコーディングのガイド)』の「Lightning Security (Lightning のセキュリティ)」を参照してください。