¿Hay alguna disposición en los rieles que permita que todas las solicitudes AJAX POST del sitio pasen sin autenticidad_token?Mi jquery POST AJAX solicita trabajos sin enviar un token de autenticidad (rieles)
Tengo una llamada Jquery POST ajax que llama a un método de controlador, pero no puse ningún código de autenticidad en ella y, sin embargo, la llamada tiene éxito.
Mi ApplicationController tiene 'request_forgery_protection' y he cambiado
config.action_controller.consider_all_requests_local
en false en mis entornos/development.rb
también he buscado mi código para asegurarse de que no estaba sobrecargando ajaxEnviar para enviar tokens de autenticidad.
¿Hay algún mecanismo en juego que deshabilite el cheque? Ahora no estoy seguro de si mi protección CSRF está funcionando o no.
Estoy usando Rails 2.3.5.
actualización para mayor claridad:
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 + " ");
}
});
};
tengo un vínculo que luego tiene un 'href que llama a la función anterior:
<a href='javascript:voteup(param1,param2)'>...</a>
recordé responder a una pregunta similar .. encontré aquí: http://stackoverflow.com/questions/2725118/rails-request-forgery-protection-settings/2725991 # 2725991 Supongo que debería ser porque es una solicitud local. No debería funcionar, por ejemplo, desde una aplicación que se ejecuta en un puerto diferente o en un dominio diferente. Ejemplo: si tienes tu aplicación ejecutándose en localhost: 3000 no deberías poder hacer una POST ajax desde localhost: 3001. –
Hola Shripad, Vi su publicación, pero ¿cómo está sucediendo esto? ¿Hay algún tipo de magia de Rails involucrada? Buscando en línea, todavía veo personas escribiendo sobre las instrucciones para enviar form_authenticity_token, por lo que si está solucionado, ¿por qué hay una necesidad de hacer eso? –
Esto no tiene nada que ver con la magia de Rails en absoluto. Ajax funciona sin un token de autenticidad si se invoca dentro del dominio mismo. Necesita un token de autenticidad no para permitir que ajax trabaje en su dominio sino para evitar ataques de otros dominios. Esa es la razón principal para tener 'protect_from_forgery' en su controlador de aplicación. El mejor ejemplo de un ataque de otro dominio es el "gusano de Myspace sammy". Búscalo. Entonces comprenderá por qué necesita un token de autenticación. –