见这里:http://guides.rubyonrails.org/security.html
[Rails CSRF保护]将自动包含一个安全令牌,从当前会话和服务器端机密计算,以Rails生成的所有形式和Ajax请求。 如果您使用CookieStorage作为会话存储,则不需要秘密。如果安全令牌与预期不符,会话将被重置。
我真的希望有人可以解释为什么如果我将整个会话存储在cookie中,则不需要服务器端密码。
我问的原因是因为我想弄清楚是否有办法在100%客户端应用程序(ember.js)中生成CSRF令牌,我将不会Rails在所有表单上插入CSRF令牌。我当然可以使用JavaScript写入cookie,我当然可以散列各种值。
如果有某种方法可以使用JavaScript生成cookie客户端,没有服务器端密码,并且能够在服务器上验证,请告诉我们!
答案 0 :(得分:0)
您是否尝试使用谷歌搜索?
有关jQuery / ember.js / Rails CSRF的大量信息。 jQuery有一个$.ajaxPrefilter
,您可以使用它将META标记中的CSRF令牌附加到请求标题(并且单页应用程序的页面上存在所说的META标记应该不是问题)< / em>的
This article提供了一个使用此方法的实现(示例在Coffeescript中)。
$ ->
token = $('meta[name="csrf-token"]').attr('content')
$.ajaxPrefilter (options, originalOptions, xhr) ->
xhr.setRequestHeader('X-CSRF-Token', token)
Here is another implemenation扩展DS.RESTAdapter
。
所有Rails在“普通”应用程序中执行的操作是将CSRF令牌添加为表单的隐藏输入字段。无论是通过这种方式还是作为HTTP请求标头,都可以通过rails获取它。
答案 1 :(得分:0)
我认为如果在Rails中使用CookieSessionStore,可能会有一个用于签名cookie的秘密令牌。 Rails可以使用该秘密令牌来验证