Я пытаюсь получить полное кэширование страниц в Rails, но я попал в большую уязвимость в отношении CSRF - или, может быть, просто из-за моего понимания этого. В настоящее время у меня есть строка form_authenticity_token
, хранящаяся в файле cookie, с которым JS может обращаться и переписывать теги заголовков.Rails 4 токен аутентичности - как в заголовке, так и в виде скрытого ввода?
Есть два места, которые я нахожу лексемы в моем генерируемой HTML:
1) В голове
<meta name="csrf-token" content="[hash]">
2) Внутри скрытый элемент ввода Форм,
<input type="hidden" name="authenticity_token" value="[different hash]">
Как указано, эти хэши отличаются друг от друга (в режиме разработки, где кеширование не является enabl ред). Почему они разные? Почему я могу удалить метатеги заголовков и оставить ввод формы в одиночку, и запрос разрешен? Но когда я удаляю тег ввода формы и оставляю заголовки, запрос отклоняется?
Эффективно это означает, что теги головы бесполезны, нет? Я могу переписать тег ввода формы в значение в моем cookie, как и в тегах заголовка, но поскольку они отличаются друг от друга, я осторожно отношусь к тому, что конечный результат может означать, особенно когда дело доходит до полного кэширования страниц ,
Применение Контроллер содержит:
protect_from_forgery with: :exception
before_filter :csrf_cookie
def csrf_cookie
cookies['authenticity-token'.freeze] = {
value: form_authenticity_token,
expires: 1.day.from_now,
secure: (Rails.env.staging? || Rails.env.production?)
}
end