Я сделал someposts о переводе ввода пользователя из окна поиска в операторе Parameterized ActiveRecord, который может быть уязвим для SQL-инъекции, но я думаю, что у меня может быть решение.Rails: все еще запутано в SQL Injection
Вот как работает поиск. Пользователь вводит что-то вроде этого в поле поиска:
name="hello" AND NOT address.town="Villa"
Внутренне, я преобразовать его в:
query = ["name LIKE ? AND address.town NOT LIKE ?", "hello", "villa"]
для:
if search
query = convert_search_to_query search
begin
includes(:address).where(query)
# rescue Exception ...
...
...
Вот моя идея: просто проверить USER- введенные атрибуты («name», «address.town» в этом случае), чтобы убедиться, что это точное совпадение для допустимого списка пользовательских атрибутов.
Если я должен был сделать это, я думаю, что не было бы возможности SQL Injection, поскольку я использую параметризованные операторы (с «?») Для обработки единственной части ввода пользователя, которую я не могу проверить - значения, которые он вводил для каждого атрибута.
На основании того, что я читал из других сообщений здесь, я не вижу, как этот код может быть более уязвимым, чем обычный параметризованный поиск, но у меня нет большого опыта использования SQL-инъекций. Это уязвимо?
также:
Я понимаю, что есть плагины, которые могут быть в состоянии помочь, но то, что я хочу сделать, это действительно очень просто, и уже работает, и я предпочел бы сохранить мое приложение, как легкий, как возможное.
Чтобы предотвратить впрыскивание в рельсы, просто используйте активную запись. Нет необходимости когда-либо иметь прямой запрос SQL в рельсах. –
Будет ли это работать, когда пользователь может ввести динамическое число запросов? – ineedahero
ActiveRecord работает везде, где работает SQL. Прочтите его документацию. Это делает жизнь намного проще, чем использование SQL и необходимость беспокоиться об инъекции. –