Esistono disposizioni nei binari che consentono a tutte le richieste POST AJAX dal sito di passare senza un autenticità_token?Le mie richieste jQuery AJAX POST funzionano senza inviare un token di autenticità (Rails)
Ho una chiamata ajax POST Jquery che chiama un metodo controller, ma non ho inserito alcun codice di autenticità al suo interno e tuttavia la chiamata ha esito positivo.
mio ApplicationController ha 'request_forgery_protection' e ho cambiato
config.action_controller.consider_all_requests_local
false nei miei ambienti/development.rb
Ho anche cercato il mio codice per assicurarsi che non stavo sovraccaricare ajaxInvia l'invio di token di autenticità.
C'è qualche meccanismo in gioco che disabilita il controllo? Ora non sono sicuro che la mia protezione CSRF funzioni o meno.
Sto usando Rails 2.3.5.
Aggiornamento per chiarezza:
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 + " ");
}
});
};
ho un link che poi ha un 'href che chiama la funzione di cui sopra:
<a href='javascript:voteup(param1,param2)'>...</a>
mi sono ricordato di rispondere a una domanda simile .. trovato qui: http://stackoverflow.com/questions/2725118/rails-request-forgery-protection-settings/2725991 # 2725991 Suppongo che dovrebbe essere perché è una richiesta locale. Non dovrebbe funzionare dire da un'app in esecuzione su una porta diversa o su un dominio diverso. Es: Se la tua app è in esecuzione su localhost: 3000 non dovresti essere in grado di eseguire un POST ajax da localhost: 3001. –
Hi Shripad, Ho visto il tuo post, ma come sta succedendo? C'è qualche tipo di magia di Rails coinvolta? Guardando online, vedo ancora persone che scrivono istruzioni per inviare form_authenticity_token, quindi se è fisso, perché c'è ancora bisogno di farlo? –
Questo non ha nulla a che fare con la magia di Rails. Ajax funziona senza un token di autenticità se è invocato all'interno del dominio stesso. Hai bisogno di un token di autenticità non per consentire a ajax di funzionare sul tuo dominio ma per prevenire attacchi da altri domini. Questa è la ragione principale per avere 'protect_from_forgery' nel controller dell'applicazione. Il miglior esempio di un attacco da un altro dominio è il "worm sammy di Myspace". Guarda su Capirai quindi perché hai bisogno di un token di autenticazione. –