Рубин на рельсах защитных форм CSRF - PullRequest
0 голосов
/ 15 декабря 2018

Я понимаю, что рельсы добавляют токены CSRF к формам, созданным с помощью своих пользовательских функций, таких как form_with и т. Д. НО он также генерирует токены CSRF (также аутентичные_token в терминах rails) для общего HTML

Я вижу смешанные ответы на это.Кто-нибудь с практическим опытом в Rails поможет мне здесь?

1 Ответ

0 голосов
/ 15 декабря 2018

Я подумал, что должен превратить это в полноценный ответ.

Нет, ручное создание <form></form> в Rails не будет автоматически вставлять токен аутентификации.Токен вставляется только при использовании помощника по формам Rails .Эти помощники позволяют вам указать поля формы без указания токена подлинности;это автоматически поместит поле токена в форму.Например:

<%= form_for @person do |f| %>
  <%= f.label :first_name %>:
  <%= f.text_field :first_name %><br />

  <%= f.label :last_name %>:
  <%= f.text_field :last_name %><br />

  <%= f.submit %>
<% end %>

Создает следующий HTML-код со скрытым полем authenticity_token:

<form action="/people" class="new_person" id="new_person" method="post">
  <input name="authenticity_token" type="hidden" value="NrOp5bsjoLRuK8IW5+dQEYjKGUJDe7TQoZVvq95Wteg=" />
  <label for="person_first_name">First name</label>:
  <input id="person_first_name" name="person[first_name]" type="text" /><br />

  <label for="person_last_name">Last name</label>:
  <input id="person_last_name" name="person[last_name]" type="text" /><br />

  <input name="commit" type="submit" value="Create Person" />
</form>

Но если вы генерируете HTML-код вручную, например, используя HAML :

%html
  %head
  %body
    %form

Сгенерированный HTML выглядит так:

<html>
  <head></head>
  <body>
    <form></form>
  </body>
</html>

... без какого-либо поля authenticity_token.

В артикула вы связались с ним, он говорит "Типичная форма сгенерирована в Rails ...", что означает сгенерированный с помощью помощника по форме Rails.Формы, созданные вручную, не «генерируются» в том смысле, в каком они используются в этом контексте.

...