Я вижу код от разработчиков, использующих неявное преобразование даты. Я хотел бы получить окончательный ответ на вопрос, почему они не должны этого делать.
SELECT * from dba_objects WHERE Created >= '06-MAR-2012';
oracle
sql-injection
Ли Риффель
источник
источник
Ответы:
Потому что
'2012/12/1'
в США это 11 месяцев после той же строковой даты в Европе.Разрешение неявных преобразований означает, что вы находитесь в зависимости от настроек местоположения.
Если вы можете назвать компанию, где допустимая погрешность составляет 11 месяцев, я буду впечатлен.
источник
Существуют проблемы, которые могут возникнуть, если код запускается в сеансе с другим форматом даты.
Сбой заявления
Плохие данные
В этой ситуации, потому что каждый из операторов изменения / вставки может быть сделан разными пользователями. Все они будут использовать одни и те же утверждения, но итоговые даты будут совершенно другими. Операторы вставки могут быть похоронены в пакете, который вызывается только косвенно. Поскольку никакая ошибка не была возвращена, проблема не может быть найдена намного позже.
SQL-инъекция
В этой ситуации злоумышленник может изменить формат даты сеанса таким образом, чтобы предоставить им доступ к данным, к которым он обычно не имеет доступа.
источник