Еще раз внимательно прочитал нижнюю часть вот этой статьи в блоге:
остались вопросы:
(1) говорится про необходимость String.escapeSingleQuotes() - но не вижу этих слов в финальном коде. Не понял как это работает.
(2) вся SOQL injection профилактика заключается в перезаписи строковой переменной, содержащей пришедшие с фронта поисковые слова или что-то, в другую строковую переменную, но теперь строчка включает в себя знаки "%"? в этом вся магия?
String SearchBookKeywordCreteria = '%'+(SearchBookKeyword == null ? '' : SearchBookKeyword)+'%';
а можно ли здесь просто перезаписать SearchBookKeyword на саму себя?
SearchBookKeyword = '%'+(SearchBookKeyword == null ? '' : SearchBookKeyword)+'%';
(3) SOQL injection возможны только в случае если вызывается query c условием типа "LIKE % что-то %" ???
У меня напрмер с фронта с строковую переменную приходит имя записи, которую я тут же хочу отправить в query:
... where name =:stringVariable ...
а здесь возможна SOQL инъекция? 
и если возможна - то что делать - перезаписать эту stringVariable в еще одну стринг переменную? 
и если возможно - а как увидеть результат инъекции, если код просто упадет тк в результате выполнения зараженного запроса в принимающий объект-переменную вернется совсем не то, что он может принять?
спасибо
Тогда тебе в помощь секюріте сканер.На сколько я помню Там в отчете очень точно описывается что как можно injection.
Должно помочь:
String str = 'L\'Oreal'; //<-- get the escaped nameSystem.debug(str); // <--debug output: L'Oreal
String strEsc = String.escapeSingleQuotes(str); //<-- pass through escape method
System.debug(strEsc); //<-- output: L\'Oreal
String wQuotes = '\'%'+strEsc+'%\''; //<-- try to create just the like string
System.debug(wQuotes); //<--output: '%L\'Oreal%'
List<Account> accts = Database.query('Select Id FROM Account WHERE Name like \'%'+strEsc+'%\'');
//debug of SOQL statement reads: Select Id FROM Account WHERE Name like '%L\'Oreal%'
ого, там в Description нужно код вставлять весь(те весь класс) или фрагмент?
я вставил один кроходный квери, отправил,
мне прислали письмо "Force.com Source Scanner job placed into queue":
lines of code: 128730 (о чем это они?)
кроме того в перечне 10 типичных ошибок качества есть пара пунктов о которых можно бы отдельные темы в форуме запилить...
вот теперь вижу escapeSingleQuotes()
но пока так и не понятно можно ли в принципе опасаться инъекции в таком случае:
myObject = [select id from object__c where name = :nameInStringSetGetVariable];
SOQL injection работает только для динамических SOQL, когда query запрос формируется в виде строки с подмешиванием переменных пришедших извне.
Запросы вида: SELECT id FROM Contact WHERE Name = :someVar этому не подвержены. Тут можно расслабиться.
Что касается динамических Soql вот вторая ссылка в поисковике:
SOQL Injection
Тут все предельно понятно описано.
А в двух словах - при составлении запроса с участием данных пришедших от пользователя может получиться все что угодно на выходе. Знающие люди на таких моментах могут много информации из базы вытянуть.
НО! Могу успокоить - такие люди на salesforce попадаются крайне редко!!!! и кроме того salesforce все таки закрытая система, и вероятность того что на вашем орге среди пользователей попадется хакер и вас взломают крайне мала.
Тема SOQL injection больше актуальна для обычных сайтов. Где все открыто любому человеку.