Rails的显示:从RestKit POST“警告不能验证CSRF令牌真实性”(Rails show

2019-06-23 15:47发布

当我尝试从为POST RestKit ,有在Rails的控制台的警告:

Started POST "/friends" for 127.0.0.1 at 2012-04-16 09:58:10 +0800
Processing by FriendsController#create as */*
Parameters: {"friend"=>{"myself_id"=>"m001", "friend_id"=>"f001"}}
WARNING: Can't verify CSRF token authenticity
(0.1ms)  BEGIN
SQL (1.7ms)  INSERT INTO `friends` (`friend_id`, `myself_id`) VALUES ('f001', 'm001')
(1.1ms)  COMMIT
Redirected to http://127.0.0.1:3000/friends/8
Completed 302 Found in 6ms (ActiveRecord: 3.0ms)

下面是客户端代码:

NSMutableDictionary *attributes = [[NSMutableDictionary alloc] init];
[attributes setObject: @"f001" forKey: @"friend_id"];
[attributes setObject: @"m001" forKey: @"myself_id"];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:attributes forKey:@"friend"];
[[RKClient sharedClient] post:@"/friends" params:params delegate:self];

我怎样才能摆脱警告?

Answer 1:

您可以安全地删除与下面的警告:

skip_before_filter  :verify_authenticity_token

这应该进入你拥有的每Rails的API控制器,或者如果你有一个base_controller所有API控制器,然后把它放在那里。

如果您也可以通过Web浏览器访问您的应用程序,然后不要把此行的application_controller ,你将创建一个安全漏洞。

它是安全地删除csrf的API调用特定的漏洞只能通过网络浏览器来执行。

更新2013年12月16日

我见过一些链接到这个答案,这表明澄清一些其他内容。 如会议或饼干 - 如果你使用的基于Web的认证方法来验证API的API可能会受到CSRF。

有一些很好的详细是Web API易受CSRF攻击? 。

我的建议还是主张RestKit用户的用户凭证不太可能基于会话或饼干,而是用户名或API密钥。

如果您的API可以与会话或Cookie通过验证,那么你应该避免跳绳: verify_authenticity_token ,你应该想想移动到基于API密钥验证。

如果您的API可以用一个用户名和密码也被用来在网络上进行身份验证通过身份验证仍然有潜在的漏洞,尽管它是那么严重,因为它会要求用户自己的用户名和密码输入到您的网站中HTTP认证的挑战箱在访问与利用该网站。 再次,对于最好的安全性,您应该考虑迁移到基于API密钥验证。

值得一提的是,我不同意,你需要添加:only => [:your_method]对于额外的保护,前提是你已经分离API控制器,你的API与您的网络响应混合,不使用会话或饼干。 如果这些都到位,你可以放心地添加skip_before_filterbase_controller为您的API。



文章来源: Rails shows “WARNING: Can't verify CSRF token authenticity” from a RestKit POST