【问题标题】:Ruby on Rails: Difference of Authenticity Token being in Header or POSTRuby on Rails:在 Header 或 POST 中的 Authenticity Token 的区别
【发布时间】:2014-01-03 13:55:42
【问题描述】:

我刚刚注意到,通过AJAX 提交请求时,我将Authenticity Token 放在哪里并不重要。我可以将其作为POST data 附加到表单中,也可以将其放入Header

有什么不同吗?特别是在安全方面?

另外:

我没有在Javascript 中编码令牌。我现在接触到什么了吗?

提前致谢。

编辑:

form.on("sending", function(file, xhr, formData) {
   xhr.setRequestHeader('X-CSRF-Token', AUTH_TOKEN);
   // formData.append('authenticity_token', AUTH_TOKEN);
});

这是我的Javascript 将令牌添加到Header 或(注释掉)到POST dataAUTH_TOKEN 是原始密钥。我没有以任何方式对其进行编码。

【问题讨论】:

  • 通过数据或标头传递令牌没有什么不同。我不明白你问题的另一部分,是否愿意显示一些代码来解释?
  • 谢谢,请稍等;)

标签: javascript ruby-on-rails ruby authenticity-token


【解决方案1】:

第一部分

如果您通过 GET 参数、POST 数据或请求标头传递真实性令牌,则完全没有区别(在 Rails 中,POST/GET 参数几乎相同)。

让我们看看代码(不是我见过的最好的代码,但是......)

def verified_request?
  !protect_against_forgery? || request.get? || request.head? ||
    form_authenticity_token == params[request_forgery_protection_token] ||
    form_authenticity_token == request.headers['X-CSRF-Token']
end

如果有效则请求(以下任何一项)

  1. protect_against_forgery? 是假的
  2. 请求是 GET
  3. 请求是 HEAD
  4. params 中的令牌等于会话中存储的令牌
  5. 标头中的令牌等于会话中存储的令牌

我应该为每个请求生成令牌并存储在会话中以供以后检查(如果后续请求是 POST/PUT/PATCH/DELETE)

如您所见,两种传递真实性令牌的方式都是有效的。

第二部分

在 AJAX 中传递原始身份验证令牌是否危险?不,只要以表格形式传递它完全没有危险。为了进一步解释,我将在另一个 SO question 中引用一个很好的答案

为什么会这样:因为真实性令牌存储在 session,客户端无法知道它的值。这可以防止人们 将表单提交到 Rails 应用程序而不查看其中的表单 应用程序本身。假设您正在使用服务 A,您登录到 服务,一切都很好。现在想象你去使用服务 B、看到喜欢的图片,点击图片查看 它的尺寸更大。现在,如果服务 B 中有一些邪恶的代码,它 可能会向服务 A(您已登录)发送请求,并询问 要删除您的帐户,请发送请求至 http://serviceA.com/close_account。这就是所谓的 CSRF (跨站请求伪造)。

原答案:https://stackoverflow.com/a/1571900/2422778

我仍然认为这个问题是你的懒惰/缺乏耐心,因为我写的所有内容在 Rails Guides 和 Stack Overflow 上都有很好的解释。希望下次您在此处发布之前更加坚持寻找答案。
无论如何,我很高兴能帮上忙。

【讨论】:

    【解决方案2】:

    当您使用https://www.owasp.org/index.php/Category:OWASP_WebScarab_Projecthttp://www.charlesproxy.com/ 等工具时,您会看到差异

    这是代理,您可以在本地打开它来处理您的 HTTP 请求和响应。

    对网络开发非常有用。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2010-11-17
      • 2018-06-29
      • 2014-07-02
      • 2016-12-28
      相关资源
      最近更新 更多