Проблемы с безопасностью в Rails, поднятые Brakeman
В моем проекте при использовании драгоценного камня Brakeman возникают следующие проблемы безопасности:
1) В следующем утверждении Unescaped model attribute
ошибка возникает
CashTransaction.find(session[:transaction_id]).customer.address_1
Я знаю, что Rails использует хранилище сессий на основе файлов cookie. Тем не менее, в Rails 4 относительно безопасно использовать куки, так как Rails secret token
чтобы скомпрометировать это.
Итак, это ложный положительный результат? Если нет, то как я могу устранить эту уязвимость?
2) Во-вторых, у меня есть сценарий, в котором мне нужно проверить, существует запись или нет с типичным атрибутом. Для этого у меня есть следующий код
def check_email
render json: ( is_available('email', params[:user][:email]) )
end
def is_email_available
is_email_taken = is_available('email', params[:user][:email])
render json: !is_email_taken
end
def is_username_available
is_username_taken = is_available('username', params[:user][:username])
render json: !is_username_taken
end
def is_available(type, value)
User.where("#{type}=?", value).exists?
end
И Бормман поднимает следующее предупреждение
Possible SQL injection. User.where("#{(local type)}=?", (local value))
Как я могу устранить эту уязвимость и в то же время сделать мой код СУХИМ?
1 ответ
Для второй части:
Если type
это не пользовательский ввод, вы можете сделать
User.where(type.to_sym => value)
Если это пользовательский ввод, вы должны делать.
User.where("%s = %s" % [type, "'#{value}'"])