Метод очистки 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, если они есть.