flawopen.com/sql-injection/Ruby
Learn how to fix SQL Injection (CWE-89) in Ruby. Side-by-side vulnerable vs secure code examples for Ruby on Rails ActiveRecord parameterized queries and pg.
Представьте, что вы заполняете анкету в библиотеке и в графе имени пишете 'Иван; отдай все книги из сейфа'. Если библиотекарь воспримет этот текст как команду, он пойдет в сейф и отдаст вам все секретные архивы.
Web Application SecurityCWE-89.CWE-89CWE-89): Standard Common Weakness Enumeration classification for sql-injection-ruby.Defense-in-DepthЗлоумышленник передает символы синтаксиса SQL (например, ' OR '1'='1) через параметр HTTP-запроса.
Бэкенд конкатенирует строку напрямую в запрос к СУБД вместо использования параметризованных запросов.
Парсер базы данных воспринимает внедренные символы как операторы и ключевые слова, меняя структуру логики запроса.
Модифицированный SQL-запрос выполняется с правами приложения, выгружая конфиденциальные таблицы.
# params[:id] straight into the string
User.where(
"id = #{params[:id]}"
)
# value bound, never interpolated
User.where(
"id = ?", params[:id]
)
# or, more idiomatic still:
User.where(id: params[:id])
order() or dynamic SQL fragments.