設問
次のコードスニペットのセキュリティ上の脆弱性は何ですか?
<apex:form>
<apex:commandButton rerender="outputIt" value="Update It" />
<apex:inputText value="{!myTextField}"/>
</apex:form>
<apex:outputPanel id="outputIt">
Value of my Textfield is <apex:outputText value="{!myTextField}" escape="false"/>
</apex:outputPanel>
選択肢
A. SOQL インジェクション
B. 任意のリダイレクト
C. クロスサイト スクリプティング
D. アクセス制御
解答
C. クロスサイト スクリプティング
解説
A. SOQL インジェクション
不正解です。SOQLインジェクションは、動的に構築されたSOQLクエリにユーザー入力を含めることで、意図しないデータ抽出や破壊的操作が可能になる脆弱性です。
本設問のコードでは、SOQLクエリが使用されていないため、インジェクションのリスクは存在しません。VisualforceページのUI要素のみの構成です。
B. 任意のリダイレクト
不正解です。任意のリダイレクトは、外部リンクへ強制的に誘導する脆弱性で、主に PageReference.setRedirect() などでユーザー入力を使用する場合に起こります。
しかし、今回のコードにはリダイレクト機能やリンク操作は含まれておらず、この脆弱性とは無関係です。
C. クロスサイト スクリプティング
正解です。に escape=”false” を指定することで、ユーザー入力がHTMLとしてそのままレンダリングされます。これにより、攻撃者が のようなコードを入力すれば、実際にJavaScriptが実行されてしまいます。
これは典型的なXSS(クロスサイトスクリプティング)脆弱性であり、Salesforceでも重大なセキュリティリスクとして明示的に警告されています。
D. アクセス制御
不正解です。アクセス制御の脆弱性は、ユーザーが本来見てはいけないオブジェクトやフィールドのデータにアクセスできる状況を指します(例:FLS違反やCRUD権限の欠如)。
このケースはUIでの入力値の表示に関するものであり、FLSやオブジェクト権限の話ではありません。
したがって、アクセス制御の問題には該当しません。
第112問
こちらをクリック