【发布时间】:2011-03-04 19:42:51
【问题描述】:
rails 中是否有任何规定允许来自站点的所有 AJAX POST 请求在没有authentity_token 的情况下通过?
我有一个调用控制器方法的 Jquery POST ajax 调用,但我没有在其中放入任何真实性代码,但调用成功。
我的 ApplicationController 确实有 'request_forgery_protection' 我已经改变了
config.action_controller.consider_all_requests_local
在我的环境/development.rb 中设置为 false
我还搜索了我的代码,以确保我没有重载 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>
【问题讨论】:
-
我记得回答过一个类似的问题.. 在这里找到它:stackoverflow.com/questions/2725118/… 我想应该是因为它是本地请求。从在不同端口或不同域上运行的应用程序说,它不应该工作。例如:如果您的应用程序在 localhost:3000 上运行,您应该无法从 localhost:3001 执行 ajax POST。
-
嗨 Shripad,我看到了你的帖子,但这是怎么回事?是否涉及某种 Rails 魔法?在网上看,我仍然看到有人写关于发送 form_authenticity_token 的说明,所以如果它已修复,为什么还需要这样做?
-
这与 Rails 的魔法无关。如果在域本身内调用 Ajax,则无需真实性令牌即可工作。您需要一个真实性令牌,不是为了让 ajax 在您的域上工作,而是为了防止来自其他域的攻击。这是在您的应用程序控制器中使用
protect_from_forgery的主要原因。来自另一个域的攻击的最佳示例是“Myspace sammy worm”。查一下。然后你就会明白为什么你需要一个身份验证令牌。
标签: jquery ruby-on-rails ruby ajax csrf