設問
次のコード スニペットの潜在的な脆弱性は次の 2 つですか?
public class SOQLController {
public String name { get; set; }
public List<Contact> queryResult { get; set; }
public SOQLController() {
queryResult = new List<Contact>();
}
public PageReference query() {
String qryString = 'SELECT Id FROM Contact WHERE IsDeleted = false AND Name LIKE :\'%' + String.escapeSingleQuotes(name) + '%\'';
queryResult = Database.query(qryString);
return null;
}
}
選択肢
A. FLS チェック
B. SOQL インジェクション
C. データ アクセス制御
D. 任意のリダイレクト
解答
B. SOQL インジェクション
C. データ アクセス制御
解説
A. FLS チェック
不正解です。
FLS(Field Level Security)は、レコードの項目単位でユーザーの参照や編集権限を制御するものです。本コードでは特定の項目を表示するロジックがないため、FLSの脆弱性に直接関連付けることはできません。
B. SOQL インジェクション
正解です。
SOQLを動的に生成しており、ユーザーが入力した値を直接クエリ文字列に連結しています。このような実装はユーザーが悪意のある値を入力した場合、任意のクエリ実行を許可する危険性があります。
C. データ アクセス制御
正解です。
このコードではレコードを取得する際に「with sharing」キーワードやアクセス権のチェックが存在しません。そのため、共有ルールや権限セットを無視して、アクセス権限を超えたデータを取得可能になるリスクがあります。
D. 任意のリダイレクト
不正解です。
本コードはリダイレクトを行う処理を含んでいないため、任意のリダイレクトの脆弱性は存在しません。この脆弱性は、動的にリダイレクト先URLを指定している場合にのみ考慮すべきです。
第74問
こちらをクリック