1

我的迷你网络设备会将数据样本提交到 RoR 应用程序,该应用程序会将它们添加到 MySQL 表中。

我想出了如何形成 POST 数据包,但我没有得到的是如何避免真实性令牌问题。

有没有办法让我的小笨蛋获取正确的令牌并将其发回?(我猜不是,否则它不会是一个安全功能)。

这不是一个高度安全敏感的应用程序,所以我应该告诉这个页面完全忽略 authentity-token 吗?

它有望通过每个客户端(Web 设备)使用唯一的用户 ID 和密码登录这一事实进行身份验证,因此它将受到会话 ID 的保护。

如果我使用“松散”的语言,请随时纠正我。我是部署站点的新手。

凯布

4

2 回答 2

2

如果每个客户端都经过身份验证,则可以禁用真实性令牌,这表示您应该只针对该一项操作禁用它。

skip_before_filter :verify_authenticity_token, :only => :create
于 2011-09-27T17:19:17.113 回答
0

如果每个客户端都经过身份验证,则可以禁用真实性令牌

仅当您使用除 http cookie 之外的其他身份验证机制时,这才是正确的。因为您提到了“session_id”,所以我认为情况并非如此。

使用标准的 rails session_id cookie,user_id 存储在会话中,并且此操作可由网络浏览器访问,它将受到 csrf 攻击。

api 的最佳策略是实现自定义身份验证机制,某种身份验证令牌,与每个 http 标头一起发送。

然后将 csrf 保护更改为 null_session,或者如果您不那么偏执,请完全为您的 api 请求禁用 csrf 保护,如此处所述

如果您仍然想为您的 api 坚持基于 cookie 的身份验证,您应该将带有第一个 GET 请求的 csrf 身份验证令牌设置为额外的 cookie。然后你读取这个 cookie 并将它的令牌作为“X-CSRF-Token”标头发送。Rails 将在protect_from_forgery 方法中检查此标头,并且由于3d 方无法读取cookie,攻击者将无法伪造此请求。

#application_controller.rb
protect_from_forgery with: :exception
after_action :set_csrf

def set_csrf
 cookies['X-CSRF-Token'] = form_authenticity_token if protect_against_forgery?
end

# request session and x-csrf-toke
# the cookies will be stored into cookie.txt
curl -c cookie.txt http://example.com

#curl post command
curl -H "X-CSRF-Token: <token>" -b cookie.txt -d '{"item":{"title":"test"}}' "http://example.com/items.json"

:verified_request? 方法来查看 rails 如何检查请求伪造。

于 2014-06-11T11:50:50.443 回答