Идентификаторы SQL, такие как имена таблиц и столбцов, не могут быть заменены связанными параметрами, что является наиболее распространенным методом обеспечения защиты от уязвимостей внедрения SQL.
Лучшее решение для обеспечения безопасности вашего table_name
- это внести его в белый список.
То есть перед интерполяцией его в ваш запрос используйте код, чтобы убедиться, что он совпадает с именем таблицы, которая существует в вашей базе данных. Многие приложения хранят кэш имен таблиц или каким-то образом отображают свои метаданные в код.
Также вы должны разделять динамические идентификаторы в бэк-тиках, поэтому в случае, если таблица допустима, но оказывается зарезервированным словом , она все равно будет работать.
some_table_name.joins("inner join `#{table_name}` as t1 ...
Также удобно использовать псевдонимы таблиц, как показано выше (as t1
), поэтому вам не нужно повторять переменную Ruby несколько раз в запросе.