Регистрация  |  Вход

String.escapeSingleQuotes() и ID как параметры страницы

Всем привет!

Всегда ли Вы "обрабатываете" методом String.escapeSingleQuotes() те ID, которые пришли в контроллер в виде параметров страницы?

понятно, что эти ID далее пойдут в SOQL, но не все SOQL имеют структуру, позволяющую сделать "инъекцию"...

Всем привет!

Всегда ли Вы "обрабатываете" методом String.escapeSingleQuotes() те ID, которые пришли в контроллер в виде параметров страницы?

понятно, что эти ID далее пойдут в SOQL, но не все SOQL имеют структуру, позволяющую сделать "инъекцию"...

Никогда. Вроде если ты приводишь к ID типу он сам валидирует и выкидывает ошибку если строка не содержит валидный ID.

Никогда. Вроде если ты приводишь к ID типу он сам валидирует и выкидывает ошибку если строка не содержит валидный ID.

Инъекция не в динамических запросах невозможна.

Инъекция не в динамических запросах невозможна.

Кстати, в целом достаточно интересный вопрос "А на сколько сильным может быть вред от SOQL 'инъекции'?" - никаких CRUD операций там не выполнишь, а доступ к данным в идеале должен быть реализован через шаринги форса.
Так что получается, что если не считать что может сформироваться невалидный SOQL-запрос и вылезет ошибка (кстати, если вы вдруг получаете String, escape'ите его в запросе, запрос делается на lookup field и в параметре прилетела белиберда - всё равно грохнется с ошибкой), особый вред возможен только в случае с without sharing, или с кастомной реализацией шаринга.

Кстати, в целом достаточно интересный вопрос "А на сколько сильным может быть вред от SOQL 'инъекции'?" - никаких CRUD операций там не выполнишь, а доступ к данным в идеале должен быть реализован через шаринги форса.
Так что получается, что если не считать что может сформироваться невалидный SOQL-запрос и вылезет ошибка (кстати, если вы вдруг получаете String, escape'ите его в запросе, запрос делается на lookup field и в параметре прилетела белиберда - всё равно грохнется с ошибкой), особый вред возможен только в случае с without sharing, или с кастомной реализацией шаринга. 

ilya leshchuk
Кстати, в целом достаточно интересный вопрос "А на сколько сильным может быть вред от SOQL 'инъекции'?"

Вот я кстати согласен с Ильей, чего так трясутся из-за этого?
На том уровне как реализована работа с GRUD, FLS, Sharing во всех проектах что я встречал SOQL Injection точно никакой пагоды не сделает. Это раз.
Во вторых Salesforce это закрытая система и пару девочек и мальчиков, которые получили к ней доступ, точно не будут такой фигней страдать. Я далек от мысли что среди них есть офигенные пентестеры или хакеры, которые знают как эксплуатировать данный вид уязвимости.
Поэтому кроме как удовлетворить свое самолюбие и знать что у тебя мега безопасные динамические запросы смысла от этого нет никакого.
Понимаю еще это актуально для открытых мега посещаемых сайтов, где каждый день может прилететь или сканер или, если посчастливится, то на вас обратит внимание реальный хакер с ровными руками.

[quote="ilya leshchuk"]Кстати, в целом достаточно интересный вопрос "А на сколько сильным может быть вред от SOQL 'инъекции'?" [/quote]
Вот я кстати согласен с Ильей, чего так трясутся из-за этого? 
На том уровне как реализована работа с GRUD, FLS, Sharing во всех проектах что я встречал SOQL Injection точно никакой пагоды не сделает. Это раз.
Во вторых Salesforce это закрытая система и пару девочек и мальчиков, которые получили к ней доступ, точно не будут такой фигней страдать. Я далек от мысли что среди них есть офигенные пентестеры или хакеры, которые знают как эксплуатировать данный вид уязвимости. 
Поэтому кроме как удовлетворить свое самолюбие и знать что у тебя мега безопасные динамические запросы смысла от этого нет никакого.
Понимаю еще это актуально для открытых мега посещаемых сайтов, где каждый день может прилететь или сканер или, если посчастливится, то на вас обратит внимание реальный хакер с ровными руками.

ок, спасибо за развернутые ответы, отдельное спасибо Илье, получается, что если все шеринги настроены правильно и классы не имеют "without sharing", то хоть что делай.

а то мне все помняться эти фото с машинами, у которых на бамперах широкий белый баннер с инъекцией заканчивающейся на "drop table" для спид-драйв ридеров...

а с какими угрозами мы все-таки можем столкнуться?

ок, спасибо за развернутые ответы, отдельное спасибо Илье, получается, что если все шеринги настроены правильно и классы не имеют "without sharing", то хоть что делай.

а то  мне все помняться эти фото с машинами, у которых на бамперах широкий белый баннер с инъекцией заканчивающейся на "drop table" для спид-драйв ридеров...

а с какими угрозами мы все-таки можем столкнуться?

Den Brown
а с какими угрозами мы все-таки можем столкнуться?

Только с человеческим фактором

[quote="Den Brown"]а с какими угрозами мы все-таки можем столкнуться?[/quote]
Только с человеческим фактором :) 

Да, кстати, а вот такой вариант: емэйл сервис который принимает емайл с любого адреса, парсит пришедший файл (обычно это CSV), затем что-то там делает с записям в БД.
Тот сервис (или класс) может раниться под очень "сильным" юзером, и если сделать инъекцию, то заставить емэйл сервис отправить результат в виде письме, наверное, не получится, а вот просто навредить - вроде удаление всех записей - это может и получиться...

Да, кстати, а вот такой вариант: емэйл сервис который принимает емайл с любого адреса, парсит пришедший файл (обычно это CSV), затем что-то там делает с записям в БД.
Тот сервис (или класс) может раниться под очень "сильным" юзером, и если сделать инъекцию, то заставить емэйл сервис отправить результат в виде письме, наверное, не получится, а вот просто навредить - вроде удаление всех записей - это может и получиться...