当前位置:  开发笔记 > 前端 > 正文

Rails,OAuth和CSRF保护

如何解决《Rails,OAuth和CSRF保护》经验,为你挑选了1个好方法。

我正在使用REST和OAuth与Rails应用程序交谈(来自iPhone应用程序,但这不应该是相关的).但是,我遇到了Rails的CSRF保护(via protects_from_forgery)的一些问题.

据我所知,CSRF保护仅适用于常规表单提交(即Content-Type = application/x-www-form-urlencoded),所以如果我提交JSON或XML数据,我会没事的.不幸的是,OAuth目前仅限于application/x-www-form-urlencoded请求.有一个规范草案将OAuth扩展到非形式urlencoded数据,但这对我现在没有帮助.

我看到它的方式,我有以下选择:

    将数据作为JSON发送,知道它不会成为OAuth签名的一部分,因此会受到中间人攻击.显然不是一个有吸引力的解决方案.

    创建UsersController#update_oauth内部委托给常规操作的特殊Rails操作(例如)(例如UsersController#update).然后从伪造保护(protects_from_forgery :only => [:update])中排除这些.这应该是可行的,并且对于一个或两个动作可能是可接受的,但显然这将是一个非常混乱的解决方案.

    覆盖Rails CSRF保护以忽略OAuth请求.我没有试过这个,但似乎应该可以更改其中一个钩子(可能是verify_authenticity_token过滤器)来考虑OAuth请求是否成功.

有没有人遇到这个?有什么建议?或者我可能遗漏了一些基本的东西?



1> Mirko Froehl..:

我会回答我自己的问题.:)

我在OAuth控制器扩展中添加了以下方法.在默认实现之上添加的唯一内容是oauth?检查.这似乎是诀窍,感觉就像一个非常干净的解决方案.

def verify_authenticity_token
  verified_request? || oauth? || raise(ActionController::InvalidAuthenticityToken)      
end

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有