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」
コメント