Ruby rails 个 CSRF 保护表单
Ruby on rails CSRF protection forms
我知道 rails 将 CSRF 令牌添加到使用其自定义函数创建的表单中,例如 form_with 等。但它是否也会生成 CSRF 令牌(a.k.a authenticity_token在 rails 术语中)一般 HTML
我看到对此的答案不一。任何有 Rails 实践经验的人都可以帮助我吗?
我想我应该把它变成一个完整的答案。
不,在 Rails 中手动创建 <form></form>
不会自动插入真实性令牌。令牌仅在使用 Rails form helper 时插入。这些助手允许您在不指定真实性令牌的情况下指定表单的字段;它会自动将令牌字段放入表单中。例如:
<%= 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 %>
使用隐藏的 authenticity_token
字段生成以下 HTML:
<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
字段。
在您链接到的 the article 中,它表示 "A typical form generated in Rails..." 表示使用 Rails 表单助手生成。在此上下文中使用的意义上,手动创建的表单不是 "generated"。
我知道 rails 将 CSRF 令牌添加到使用其自定义函数创建的表单中,例如 form_with 等。但它是否也会生成 CSRF 令牌(a.k.a authenticity_token在 rails 术语中)一般 HTML
我看到对此的答案不一。任何有 Rails 实践经验的人都可以帮助我吗?
我想我应该把它变成一个完整的答案。
不,在 Rails 中手动创建 <form></form>
不会自动插入真实性令牌。令牌仅在使用 Rails form helper 时插入。这些助手允许您在不指定真实性令牌的情况下指定表单的字段;它会自动将令牌字段放入表单中。例如:
<%= 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 %>
使用隐藏的 authenticity_token
字段生成以下 HTML:
<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
字段。
在您链接到的 the article 中,它表示 "A typical form generated in Rails..." 表示使用 Rails 表单助手生成。在此上下文中使用的意义上,手动创建的表单不是 "generated"。