2012-04-16 42 views
22

「警告不能驗證CSRF令牌真實性」當我試圖從RestKit發帖,有在Rails的控制檯的警告:Rails的顯示:從RestKit POST

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]; 

我該如何擺脫警告?

回答

71

您可以放心地用下面的刪除警告:

skip_before_filter :verify_authenticity_token 

這應該進入你有,或者如果你對所有API控制器一base_controller然後把它放在那裏每一個Rails的API控制器。

如果您還可以通過網絡瀏覽器訪問您的應用程序,則不要將此行放在application_controller中,因爲您將創建安全漏洞。

對於API調用,刪除csrf是安全的,因爲特定漏洞只能通過Web瀏覽器執行。

更新2013年12月16日

我已經看到了一些鏈接到這個答案,這表明澄清一些其他內容。如果您使用基於Web的身份驗證方法對API進行身份驗證,則API可能容易受到CSRF攻擊 - 例如,會話或cookie。

Is your Web API susceptible to a CSRF exploit?有一些很好的細節。

我的建議仍然代表RestKit的用戶,因爲用戶憑據不太可能基於會話或cookie而是用戶名或API密鑰。

如果您的API可以使用會話或cookie進行身份驗證,那麼您應該避免跳過: verify_authenticity_token,您應該考慮轉移到基於api密鑰的身份驗證。

如果您的API可以通過用戶名和密碼進行驗證,該用戶名和密碼也用於在Web上進行身份驗證,但仍然存在潛在的漏洞利用,儘管它不太嚴重,因爲它要求用戶輸入用戶名和密碼訪問帶有漏洞的站點時,您的站點位於HTTP身份驗證挑戰框中。同樣,爲了獲得最佳安全性,您應該考慮轉向基於api密鑰的身份驗證。

值得注意的是,我不同意你需要添加:only => [:your_method]以獲得額外的保護,前提是你有獨立的api控制器,你的api沒有與你的web響應混合,並且你沒有使用會話或cookie。如果這些已經到位,您可以安全地將skip_before_filter添加到您的api的base_controller中。

+30

爲了避免打開一個大洞,我建議skiping驗證只爲你的方法。 'skip_before_filter:verify_authenticity_token:僅=> [:your_method]' – 2012-05-31 23:38:23

+15

那些剪切和粘貼上面的代碼:'skip_before_filter:verify_authenticity_token,:僅=> [:your_method]'馬克忘記逗號。 DId沒有看到編輯按鈕。 – pjammer 2013-07-05 17:02:37

+0

感謝這個詳細信息... – 2015-06-17 06:30:57