В моем проекте, при использовании Brakeman gem, следующие вопросы безопасности повышается:Вопросы безопасности в Rails поднятые кондуктор
1) В следующем заявлении Unescaped model attribute
ошибка возникает
CashTransaction.find(session[:transaction_id]).customer.address_1
Я знаю, что Rails использует хранилище сеансов на основе файлов cookie. Тем не менее, Rails 4 относительно безопасно использовать файлы cookie, так как вам понадобится 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))
Как я могу удалить эту уязвимость, и в то же время сделать мой код DRY?
Для последнего является «значением» ввода от пользователя? – fatfrog
Да, это может быть электронное письмо или имя пользователя – abhinavmsra
Для меня второй выглядит хорошо - это было бы проблемой, если бы у вас был User.where ("# {type} = # {value}). - Не знаю, почему brakeman что это https://www.owasp.org/index.php/Ruby_on_Rails_Cheatsheet#SQL_Injection - это драгоценный камень на сегодняшний день? – fatfrog