ohh*_*hho 22 ruby-on-rails ios ruby-on-rails-3 restkit
当我尝试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];
我该如何摆脱警告?
nmo*_*ott 71
您可以使用以下方法安全地删除警告:
skip_before_filter  :verify_authenticity_token
这应该包含在您拥有的每个Rails API控制器中,或者如果您拥有base_controller适用于所有API控制器的控制器,则将其放在那里.
如果您还可以通过Web浏览器访问您的应用程序,则不要将此行放入,application_controller因为您将创建一个安全漏洞.
可以安全地删除csrfAPI调用,因为特定漏洞只能通过Web浏览器执行.
2013年12月16日更新
我已经看到了这个答案的一些链接和一些其他内容,这些内容暗示了澄清.如果您使用基于Web的身份验证方法来验证API(例如会话或cookie),则API可能容易受到CSRF的攻击.
有一些很好的详细是Web API易受CSRF攻击?.
我的建议仍然代表RestKit的用户,因为用户凭据不太可能基于会话或cookie,而是基于用户名或api密钥.
如果您的API可以通过会话或cookie进行身份验证,那么您应该避免跳过,: verify_authenticity_token并且您应该考虑转向基于api密钥的身份验证.
如果您的API可以使用用于在网络上进行身份验证的用户名和密码进行身份验证,那么仍然存在潜在的漏洞利用,尽管它不太严重,因为它要求用户在您的网站中键入其用户名和密码.使用漏洞访问网站时的HTTP Auth挑战框.同样,为了获得最佳安全性,您应该考虑转向基于api密钥的身份验证.
值得注意的是,我不同意你需要添加:only => [:your_method]额外的保护,只要你有孤立的api控制器,你的api没有与你的网络响应混合,你没有使用会话或cookie.如果这些已经到位,您可以安全地将其添加skip_before_filter到base_controller您的api中.
| 归档时间: | 
 | 
| 查看次数: | 24332 次 | 
| 最近记录: |