我的迷你网络设备会将数据样本提交给RoR应用程序,该应用程序会将它们添加到MySQL表格中。
我想出了如何构建POST数据包,但我没有得到的是如何避免真实性令牌问题。
我的小哑客户有没有办法抓住正确的令牌并将其发回? (我猜不是,或者它不是一个安全功能)。
这不是一个高度安全性敏感的应用程序,所以我应该告诉这个页面完全忽略认证标记吗?
希望通过每个客户端(Web设备)使用唯一的用户ID和密码登录这一事实进行身份验证,因此会受到会话ID的保护。
Keb'm
答案 0 :(得分:1)
如果每个客户端都经过身份验证,则可以禁用真实性令牌,该令牌表示您应该只为该一个操作禁用它。
skip_before_filter :verify_authenticity_token, :only => :create
答案 1 :(得分:0)
如果每个客户端都经过身份验证,则可以禁用真实性令牌
只有在您使用其他身份验证机制而不是http Cookie时才会出现这种情况。因为 你已经提到了#session; id',我认为情况并非如此。
使用标准的rails session_id cookie,将user_id存储在会话和此操作中 可以通过webbrowser访问,它将暴露于csrf攻击。
api的最佳策略是实现自定义身份验证机制,某种身份验证令牌,与每个http头一起发送。
然后将csrf保护更改为null_session或者如果你不那么偏执禁用 完全针对您的api请求提供csrf保护,如here
所述如果你仍然希望坚持使用基于cookie的身份验证,你应该设置 将第一个GET请求的csrf authenitcation令牌转换为额外的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如何检查请求伪造。