1

见这里: http: //guides.rubyonrails.org/security.html


[Rails CSRF 保护] 将自动包含一个安全令牌,该令牌是根据当前会话和服务器端机密计算得出的,用于 Rails 生成的所有形式和 Ajax 请求。如果您使用 CookieStorage 作为会话存储,则不需要该密钥。如果安全令牌与预期不匹配,会话将被重置。


我真的希望有人可以向我解释为什么如果我将整个会话存储在 cookie 中就不需要服务器端的秘密。

我问的原因是因为我想弄清楚是否有一种方法可以在 100% 客户端应用程序(ember.js)中生成 CSRF 令牌,我不会让 Rails 在所有表单上插入 CSRF 令牌。我当然可以使用 JavaScript 写入 cookie,我当然可以散列各种值。

如果有某种方法可以使用 JavaScript 在客户端生成 cookie,没有服务器端的秘密,并且能够在服务器上进行验证,请告诉我!

4

2 回答 2

0

你试过用谷歌搜索这个吗?

那里有很多关于 jQuery/ember.js/Rails CSRF 的信息。jQuery 有一个$.ajaxPrefilter可以用来将 CSRF 令牌从 META 标记附加到请求标头(并且在单页应用程序的页面上存在所述 META 标记应该不是问题)

本文提供了一个使用此方法的实现(示例在 Coffeescript 中)。

$ ->
  token = $('meta[name="csrf-token"]').attr('content')
  $.ajaxPrefilter (options, originalOptions, xhr) ->
    xhr.setRequestHeader('X-CSRF-Token', token)

这是扩展DS.RESTAdapter.

Rails 在“普通”应用程序中所做的所有事情都是将 CSRF 令牌作为隐藏输入字段添加到表单中。无论是这种方式还是作为 HTTP 请求标头,它都被 Rails 拾取。

于 2013-05-29T21:55:42.927 回答
0

我认为如果在 Rails 中使用 CookieSessionStore,可能会有一个用于签署 cookie 的秘密令牌。Rails 可能会使用该秘密令牌来验证

于 2014-03-20T19:25:26.650 回答