Метод очистки Rails с добавлением двойных кавычек

Я использую ActiveRecord::Base.sanitize метод, чтобы избежать атак SQL-инъекций.

Моя проблема заключается в том, что где бы я ни проводил дезинфекцию пользовательского ввода, результат возвращается с добавлением дополнительных двойных кавычек перед одинарными кавычками в начале строки и после одинарных кавычек в конце строки.

пример:

ActiveRecord::Base.sanitize("Test")
=> "'Test'"

Я ожидал, что это вернется "Test" или же 'Test', почему это возвращается "'Test'"??

Спасибо, Санджай Салунхе

2 ответа

sanitize работает как положено. Проблема здесь в консоли Rails:

ActiveRecord::Base.sanitize("Test")
=> "'Test'"
puts ActiveRecord::Base.sanitize("Test")
'Test'
=> nil

Консоль автоматически переносит результат с дополнительным "".

ActiveRecord::Base.sanitize устарел и внутренне вызывает quote метод:

def quote(value)
  return value.inspect unless value.is_a? String
   if value.include?("'")
      value.inspect
   else
     "'#{value}'"
   end
end

Благодаря комментариям @jeffdill2

Цель sanitize метод состоит в том, чтобы добавить дополнительные одинарные кавычки, которые нарушали бы введенные операторы SQL, если они есть.

Другие вопросы по тегам