- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
Rails 中的真实性 token 是什么?
最佳答案
会发生什么
当用户查看表单以创建、更新或销毁资源时,Rails 应用会创建一个随机的 authenticity_token
,将此 token 存储在 session 中,并将其放置在形式。当用户提交表单时,Rails 查找 authenticity_token
,将其与存储在 session 中的那个进行比较,如果匹配则允许请求继续。
为什么会这样
由于真实性 token 存储在 session 中,客户端无法知道其值。这可以防止人们在没有查看该应用程序本身的表单的情况下向 Rails 应用程序提交表单。想象一下,你正在使用服务 A,你登录到该服务,一切正常。现在想象一下,你去使用服务 B,你看到了一张你喜欢的图片,然后按下图片以查看更大尺寸的图片。现在,如果服务 B 存在一些恶意代码,它可能会向服务 A(您已登录)发送请求,并通过向 http://serviceA.example 发送请求来要求删除您的帐户/关闭账户
。这就是所谓的 CSRF (Cross Site Request Forgery) .
如果服务 A 使用真实性 token ,则此攻击向量不再适用,因为来自服务 B 的请求将不包含正确的真实性 token ,并且将不允许继续。
API docs描述有关元标记的详细信息:
CSRF protection is turned on with the
protect_from_forgery
method,which checks the token and resets the session if it doesn't match whatwas expected. A call to this method is generated for new Railsapplications by default.The token parameter is namedauthenticity_token
by default. The nameand value of this token must be added to every layout that rendersforms by includingcsrf_meta_tags
in the HTML head.
注意事项
请记住,Rails 仅验证非幂等方法(POST、PUT/PATCH 和 DELETE)。不检查 GET 请求的真实性 token 。为什么?因为 HTTP 规范声明 GET 请求是幂等的,并且不应不在服务器上创建、更改或销毁资源,并且请求应该是幂等的(如果多次运行相同的命令,您应该得到每次都是相同的结果)。
此外,真正的实现比开始时定义的要复杂一些,以确保更好的安全性。 Rails 不会对每个表单发出相同的存储 token 。它也不会每次都生成和存储不同的 token 。它在 session 中生成并存储加密哈希,并在每次呈现页面时发布新的加密 token ,这些 token 可以与存储的 token 进行匹配。参见 request_forgery_protection.rb .
类(class)
使用 authenticity_token
保护您的非幂等方法(POST、PUT/PATCH 和 DELETE)。还要确保不允许任何可能修改服务器资源的 GET 请求。
检查 the comment by @erturne关于 GET 请求是幂等的。他以比我在这里所做的更好的方式解释了它。
关于ruby-on-rails - 了解 Rails 真实性 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/941594/
我浏览了Truthiness in Python并理解 [] 和类似的空对象在 Python 中被解释为 False。 但是当我在 REPL 中输入以下内容时,它返回 False: >>> [] ==
我是 JavaScript 的新手,我正在尝试从 Internet 资源中学习它。虽然我知道会有很多 cr*p Material ,但大多数人似乎都同意的一件事是 JS 中事物的真实性(只是举个例子
Android/Iphone 应用程序将从服务器访问应用程序数据。[Django-Python] 如何确保与移动应用程序的通信安全? 期望:对密码等敏感信息足够安全,除了暴力破解之外,没有直接的解密方
我目前有一个应用程序,它使用常规 Devise 身份验证进行登录和注销,但使用 Devise 的 token_authenticatable 模块创建一个唯一 token ,该 token 在从书签提
我正在使用 rails 4.0.3 和 passenger和 authlogic构建 Web 应用程序并在用户登录时遇到问题,但在创建新的 UserSession 时使用以前的用户真实性 token
有谁知道在 Ruby on Rails 3 中如何管理真实性 token ?在展示如何使用 HTML5 数据属性的所有不显眼的 Javascript Ruby on Rails 3 文章中,我在任何地
Rails 中的真实性 token 是什么? 最佳答案 会发生什么 当用户查看表单以创建、更新或销毁资源时,Rails 应用会创建一个随机的 authenticity_token,将此 token 存
当我遇到一些真实性 token 问题时,我正在开发一个新的 Rails 4 应用程序(在 Ruby 2.0.0-p0 上)。 在编写响应 json 的 Controller 时(使用 respond_
我正在将devise(最新版本-3.2.0)与rails(最新版本-4.0.1)一起使用 我正在做简单的身份验证(没有ajax或api),并且CSRF身份验证 token 出现错误。检查下面的POST
我正在尝试在 Rails 中执行跨平台请求。 我的 html 代码是:- Title
我正在使用 Sinatra 框架在 ruby 中构建一个简单的应用程序。它主要基于“获取”——大多数请求将用于列出数据。但是,应用程序中有几个关键屏幕将收集用户输入。我想确保该应用尽可能安全,目前
我正在尝试使用 uploadify ( http://www.uploadify.com ) 在 rails 3 应用程序中获取文件上传进度条,但我被困在真实性 token 上。我当前的uploadi
我正在尝试对一个简单的 Rails 应用程序执行 JMeter 后期操作,但我得到以下回复: 在 2015-05-04 12:40:15 -0700 开始为 127.0.0.1 发布“/flights
我的问题是关于加强 .NET 程序集之间的安全性。这是场景: Foundation 程序集部署在服务器上。 应用程序中附带了一系列插件程序集。 插件使用Foundation的功能。 由于Foundat
在 rails 4 应用程序的同一页面上,我有一个 在头部: 和下面的 body : js 调用需要 csrf token 。但是为什么form token与csrf token不同呢?表
在我们的 Rails 应用程序中,用户经常将多个浏览器选项卡一次打开数小时或数天。当在这些选项卡之一中,用户注销然后重新登录(或 session 过期并创建新 session )时,就会出现问题。 这
我有一个使用 Windows Phone 8 SDK 的 Phonegap 2.3.0 通过 iframe 加载的 Web 应用程序。通过 iframe 加载它的问题是,当我发送 $.post() 请
我的 Rails 应用程序订阅了一个外部系统 POST 通知(名为 Orion context broker)。我管理发送 json 数据和处理响应(ruby->Orion)。 但是当收到通知请求时,
我正试图在 Rails 中获得完整的页面缓存,但我在 CSRF 方面遇到了很大的障碍——或者可能只是我对它的理解。我目前有 form_authenticity_token存储在 cookie 中的字符
我正在开发一个简单的网站,让管理员提出问题并让用户解决问题。我在管理部分使用 ActiveAdmin,在用户解决部分使用简单的 AJAX 调用。起初尝试通过 ActiveAdmin::Devise 登
我是一名优秀的程序员,十分优秀!