Rails 关于 csrf 的问题

tank_lei · 2013年11月18日 · 最后由 linjunzhugg 回复于 2015年04月20日 · 3256 次阅读

现在需要通过 rails 作为后端,为 android 提供数据。但是在 form 提交的时候,发现一个 csrf 的问题。 我的解决方案是,在 post 提交之前,android 端先 get 方式请求一次,我把 token 传送过去,然后,post 提交的时候,把这个 token 带上。不知道只有可行不?还是说有更简单的方法

因为你手机端都是不支持 cookie 的,所以一般验证会以其他形式来实现,如:将 u_id 和 auth_token 放在 HTTP 头里。

如果单纯以 api 的形式供调用,csrf 是可以禁用的。

我觉得既然客户端是 app,那也没什么太大必要做 csrf 防御,直接将 ApplicationController 里的 protect_from_forgery 注释掉就 OK 了

你的 get 请求就能获取 csrftoken 那么这个令牌还有啥用,谁都可以请求了令牌再发请求了。。完全失去了这个令牌的存在意义。。

1、既然你提交 form 有 csrf 的问题,说明你并没有用到 webview, 也就是直接使用 http 进行交互。那么你的请求是不会带 cookies 的 2、csrf token 的生成是跟 cookies 有关的,你直接 get 方式,是可以拿到 token,只不过这个 token 是无效的。再次 post 时只会报402

建议:

  1. 对该接口关闭 csrf
  2. 使用 Oauth2 来解决安全问题
需要 登录 后方可回复, 如果你还没有账号请 注册新账号