Jus*_*sti 2 javascript ruby ruby-on-rails authenticity-token
Authenticity Token我刚刚注意到,通过 提交请求时将我的放在哪里并不重要AJAX。我可以将其附加到表单中POST data,或者将其放入Header.
有什么区别吗?特别是在安全方面?
此外:
我没有对 Token 进行编码Javascript。我现在接触过什么吗?
提前致谢。
编辑:
form.on("sending", function(file, xhr, formData) {
xhr.setRequestHeader('X-CSRF-Token', AUTH_TOKEN);
// formData.append('authenticity_token', AUTH_TOKEN);
});
Run Code Online (Sandbox Code Playgroud)
这是我Javascript将令牌添加到Header或(注释掉)到POST data. AUTH_TOKEN是原始密钥。我没有以任何方式对其进行编码。
第一部分
如果您通过 GET 参数、POST 数据或请求标头传递真实性令牌,则完全没有区别(POST/GET 参数在 Rails 中实际上是相同的)。
让我们看一下代码(不是我见过的最好的代码,但是......)
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
Run Code Online (Sandbox Code Playgroud)
请求是否有效(以下任何一项)
protect_against_forgery?是假的我应该补充的是,为每个请求生成令牌并将其存储在会话中以供以后检查(如果后续请求是 POST/PUT/PATCH/DELETE)
正如您所看到的,传递真实性令牌的两种方式都是有效的。
第二部分
在 AJAX 中传递原始身份验证令牌是否危险?不,只要以某种形式传递它就完全没有危险。为了进一步解释,我将在另一个问题中引用一个很好的答案
为什么会发生这种情况:由于真实性令牌存储在会话中,客户端无法知道其值。这可以防止人们在不查看应用程序本身内的表单的情况下向 Rails 应用程序提交表单。想象一下,您正在使用服务 A,您登录了该服务,一切正常。现在想象一下,您去使用服务 B,并且看到了一张您喜欢的图片,并按下该图片以查看更大尺寸的图片。现在,如果服务 B 存在一些恶意代码,它可能会向服务 A(您已登录)发送请求,并通过向 http://serviceA.com/close_account发送请求来要求删除您的帐户。这就是所谓的 CSRF(跨站请求伪造)。
原始答案:https ://stackoverflow.com/a/1571900/2422778
我仍然认为这个问题是你的懒惰/缺乏耐心,因为我写的所有内容在 Rails Guides 和 Stack Overflow 上都得到了很好的解释。希望下次您在发帖之前能更加坚持寻找答案。
无论如何,我很高兴能提供帮助。
| 归档时间: |
|
| 查看次数: |
2369 次 |
| 最近记录: |