在rails中是否有任何規定允許來自站點的所有AJAX POST請求在沒有authenticity_token的情況下通過?我的jQuery AJAX POST請求在沒有發送真實性令牌的情況下工作(Rails)
我有一個調用控制器方法的Jquery POST ajax調用,但我沒有在其中添加任何真實性代碼,但調用成功。
我ApplicationController中確實有「request_forgery_protection」,我已經在我的環境改變
config.action_controller.consider_all_requests_local
爲false/development.rb
我還搜查我的代碼,以確保我沒有超載ajaxSend發送真實性令牌。
是否有一些機制可以禁用檢查?現在我不確定我的CSRF保護是否有效。
我正在使用Rails 2.3.5。
更新爲清楚:
function voteup(url, groupid){
$.ajax({
type: "POST",
url: "/groups/" + groupid + "/submissions/voteup",
data: "url=" + url,
dataType: 'text',
success: function(data){
var counter = "vote_" + url;
$('#vote_' + url.cleanify()).text(" " + data + " ");
}
});
};
我有一個鏈接,然後有一個「HREF調用上面的函數:
<a href='javascript:voteup(param1,param2)'>...</a>
我記得回答過類似的問題..在這裏找到: http://stackoverflow.com/questions/2725118/rails-request-forgery-protection-settings/2725991#2725991 我想應該是因爲它的本地請求。它不應該從運行在不同端口或不同域上的應用程序發出。例如:如果您的應用程序在localhost:3000上運行,您應該無法從localhost:3001執行ajax POST。 – 2010-06-17 10:52:25
Hi Shripad, 我看到了你的帖子,但是這是怎麼回事?是否存在某種Rails魔法? 在網上看,我仍然看到有人寫關於發送form_authenticity_token的指令,所以如果它是固定的,爲什麼仍然需要這樣做? – 2010-06-18 03:43:57
這與Rails的魔法無關。如果Ajax在域本身內被調用,那麼Ajax將不具有真實性標記。您需要一個真實性標記,而不是用於啓用Ajax才能在您的域中工作,但是需要防止來自其他域的攻擊。這是在應用程序控制器中擁有'protect_from_forgery'的主要原因。來自另一個領域的攻擊的最好例子是「Myspace sammy蠕蟲」。看看它。然後,您將瞭解爲什麼您需要身份驗證令牌。 – 2010-07-05 03:32:29