在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