Безопасный редирект на вложенный ресурс в Rails
Я недавно добавил драгоценный камень Brakeman в свой Gemfile и должен был увидеть, что я должен использовать
:only_path => true
чтобы сделать его более безопасным. Но я использую вложенный ресурс и не знаю точно, как, вот часть из моего контроллера.
if @comment.update_attributes(params[:comment])
redirect_to [@message, @comment], notice: 'Comment was successfully updated.'
Как я могу это сделать, я видел только атрибут only_path с помощником url_for. Спасибо за вашу помощь!
1 ответ
Короткий ответ: тормозник будет жаловаться в этом случае, несмотря ни на что. Исправление в миксе (https://github.com/presidentbeef/brakeman/issues/143).
Как и ваш код в безопасности. Первый аргумент передается в url_for, который в этом случае строит полиморфный маршрут на основе ваших моделей.
Обратите внимание, что по умолчанию:only_path имеет значение true, поэтому вы получите относительный "/ controller / action" вместо полного URL-адреса, например "example.com/controller/action"
Но чтобы ответить на ваш вопрос, он будет предупреждать в любой форме, где первый аргумент преобразуется в строку, хотя это и предупреждение о слабой уверенности. Это будет исправлено.
TANGENT alert. Допустим, вы хотите redirect_to @ message.some_url. Это создаст предупреждение с высокой степенью достоверности, которое вы можете исправить с помощью чего-то вроде:
redirect_to URI.parse(url_for(@message.some_url)).path, notice: 'Comment was successfully updated'