SOQLインジェクションとXSSへの対策方法

○SOQLインジェクション

Salesforceでは、一般のWebサイトと同様に、SOQL内でバインド変数を使用することで、SOQLインジェクションの対策が可能です。

// :name がバインド変数
result = [Select Id From Contact Where Name Like :name];

動的にSOQLを記述する必要がある場合は、StringのescapeSingleQuotesメソッドで、シングルクォーテーションをエスケープして対策します。

// OK
String query = 'Select Id From Contact Where Name Like \'' + String.escapeSingleQuotes(name) + '\'';
result = Database.query(query);

// NG
String query = 'Select Id From Contact Where Name Like \'' + name + '\'';
result = Database.query(query);

○XSS

Salesforceでは、<apex>タグで記述した部分はXSS対策がされます
<apex>タグのescape属性がデフォルトでtrueに設定されているため、自動的にHTMLエスケープされます。
※ escape属性をfalseに指定した場合は、XSS対策がされなくなります。

<apex>タグで記述していない部分のHTMLやJavaScriptについては、一般のWebサイトと同様の方法で、自分でXSS対策を行う必要があります。

<参考>
Developerforce 「Security Tips for Apex and Visualforce Developers」

コメント(0)