4

我从未使用过Rails(这只能回答我的问题),但我看到它在每个带有表单的页面中放置了CSRF标记。
我不明白为什么它使用两个标签:

<meta name=“csrf-token”content=“<%=form_authenticity_token%>”/><meta name=“csrf-param”content=“authenticity_token”/>

为什么不只是csrf-token元?

<meta name=“csrf-token”content=“<%=form_authenticity_token%>”/>

有什么用csrf参数?

2个答案2

重置为默认值
6

Rails允许您在后台进行大量与CSRF令牌相关的配置。如果愿意,可以更改参数的名称,但如果这样做jQuery UJS驱动程序需要知道新参数的名称(因为它用于Ajax请求)。这就是为什么这里有两个元参数:第一个显然是真实性标记,但第二个是Rails的JavaScript驱动程序所必需的,以便知道第一个的名称。(您可以在jQuery驱动程序原型驱动程序.)

你可能会认为这会让你陷入某种疯狂的循环——为什么你不能重命名csrf程序meta标记与另一个meta标记?我认为这样做是为了让Rails能够轻松采用现有的CSRF解决方案,而不需要大量的手动覆盖。此外,它还可以让你的应用程序稍微经得起未来的考验。如果HTML5标准曾经为CSRF标记采用官方标记,并且Rails选择在未来版本中更改默认的CSRF标记,那么JavaScript驱动程序根本不需要更改。

归根结底,我认为这最接近这种情况存在的真正原因:它是对CSRF系统未来变化的保险,防止了不必要的、甚至可能极其恼人的抨击。

0
2

csrf param包含参数的名称,csrf token是参数的值。因此,您的表单如下所示:

<form action=“/”method=“post”><input type=“hidden”name=“authenticity_token”value=“OWY4NmQwODE4ODRjN2Q2NTlhMmZlYWEwYzU1YWQwMTVhM2JmNGYxYjJiMGI4MjkGTfMTVi”MGYwMGEwOA==“></form>
2
  • 如果使用单个元,则会对参数名进行限制,参数名应始终相同。通过更改csrf-param内容,我可以将标记的名称从“authenticity_token”更改为“my_token“,值可以放在csrf-token元内容下。 评论 2012年8月30日15:20
  • 好的,这是为了定制问题。 评论 2012年8月30日15:46

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.