Защита Rails CSFR: правильно ли писать before_filter?
Мой контроллер приложения выглядит так:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :check_csrf
def check_csrf
if not verified_request?
redirect_to root_url, :error => "forgery protection"
return
end
end
end
Без check_csrf Rails записывает предупреждение на консоль сервера о неверных ответах, затем выполнение продолжается как обычно. Поэтому мне пришлось написать свой собственный check_csrf. Теперь все отлично работает. Это правильно? Есть ли более простой способ остановить выполнение неверного запроса?
Версия Rails: 3.1.
1 ответ
Решение
Я думаю, что вы должны переопределить handle_unverified_request.
Что-то вроде того:
class ApplicationController < ActionController::Base
protect_from_forgery
protected
def handle_unverified_request
redirect_to root_url, :error => "forgery protection"
end
end