Estoy usando backbone.js y funciona muy bien. pero los formularios que estoy creando como una plantilla de JavaScript carecen del token de protección rsils csrf. ¿Cómo lo agrego a las plantillas que estoy creando en javascript?Rieles: cómo agregar protección CSRF a formularios creados en javascript?
Respuesta
Si tiene <%= csrf_meta_tag %>
en su diseño en alguna parte y que sea accesible a usted de los js, entonces se puede acceder a él mediante $('meta[name="csrf-token"]')
Ver http://eunikorn.blogspot.com/2011/07/working-with-backbonejs-in-harmony-with.html por una idea sobre cómo cortar en apoyo csrf en cada solicitud columna vertebral
puede anteponer el token CSRF a cada formulario que utiliza 'post' o 'eliminar'. Aquí está en CoffeeScript:
$ ->
for f in $("form")
if f.method == 'post' or f.method == 'delete'
$(f).prepend("<input type='hidden' name='authenticity_token' value='" + token + "'>")
Asegúrese de que tiene <% = csrf_meta_tags%> en su diseño. Ya debería estar en el diseño estándar de 'aplicación', pero agréguelo si está usando un diseño diferente.
¿Dónde se declara 'token'? Lo que significa – juliangonzalez
@suga_shane escribiendo "asegúrese de que tiene' <% =% csrf_meta_tags> '", es que este Rieles ayudante genera un testigo para usted y lo inserta en el 'head' HTML. El token es el atributo 'contenido en materia en la etiqueta' ' con el nombre' csrf-token'. – sameers
mejor manera que resolvió este, dentro del formulario:
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
Funciona, pero ¿por qué? ¿No es [ 'form_authenticity_token'] (http://apidock.com/rails/ActionController/RequestForgeryProtection/form_authenticity_token) privado en el controlador? –
Esto no funciona para mí Rails 4.2.2. Me sale: 'variable local o método no definido 'form_authenticity_token' para # <#
Hola chicos, parece que 'form_authenticity_token' es privado para los controladores como Franklin dijo. Lo que vi como una sugerencia fue declarar una variable en un controlador '@form_token = form_authenticity_token' y usarla en la vista. – lucianosousa
En cuanto a los carriles 4.2.2 no se le permite utilizar
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
de su archivo .js.erb
activos.
Sin embargo, puede crear el formulario dentro del archivo .js.erb
y en la vista que contiene el archivo de forma .html.erb
utilizar el hidden_field_tag
ayudante para generar el elemento token. Como este elemento se generará fuera del formulario, puede usar jquery para agregar este elemento al formulario.
Caso de estudio: SweetAlert (primera versión, la versión también parece haber resuelto este problema)
show.js.erb
$('.js-button-apply-offer').click(function(e) {
var urlOffer = $(this).attr('data-url-offer');
var modalParams = {
type: 'warning',
title: 'add file',
text: '<p>Need to add a file before continuing</p>' // This is a hack for Sweet alert, solved in SweetAlert2 Consider upgrade
+"<form action='"+urlOffer+"' id='formCustomCV' method='post' enctype='multipart/form-data' data-remote='true'>"
+ "<input type='file' name='custom_cv' id='fileToUploadAlert' accept='application/pdf'>\n"
+"</form>",
html: true,
showCancelButton: true,
confirmButtonColor: '#DD6B55',
confirmButtonText: 'Send',
cancelButtonText: 'Cancel',
closeOnConfirm: false
}
swal(modalParams,
function(){
var form_token = $('#form_token');
$('#formCustomCV').append(form_token).submit(); //update to submit using ajax
});
show.html.erb
<%= button_tag t('offers.offer.apply'),
class: 'center-block btn btn-success js-button-apply-offer',
id: "js-button-apply-offer",
data: {
url_offer: apply_talents_offer_path(@offer),
}
%>
<%= hidden_field_tag :authenticity_token, form_authenticity_token, id: :form_token %>
- 1. ¿Cómo desactivo la protección CSRF en una aplicación de rieles?
- 2. Rails, OAuth y protección CSRF
- 3. ¿Deshabilitar la protección CSRF a veces justificado?
- 4. Pregunta de protección CSRF
- 5. Protección CSRF en solicitudes AJAX usando MVC2
- 6. Cómo eximir la protección CSRF en direct_to_template
- 7. ¿Cómo funciona la protección Rails CSRF?
- 8. Django CSRF Token sin formularios
- 9. ¿Para qué sirve realmente la protección CSRF?
- 10. Diseño de API de rieles sin deshabilitar la protección de CSRF
- 11. ¿Cómo agregar CSRF al formulario creado manualmente en wordpress?
- 12. Symfony 2 Desactivar la protección CSRF ficha en ajax presentar
- 13. ¿Es así como funciona la protección CSRF de Django?
- 14. Desactivar token CSRF en rieles 3
- 15. usando htaccess protección con contraseña en rieles?
- 16. Codeigniter CSRF: cómo funciona
- 17. Protección CSRF: ¿tenemos que generar un token para cada formulario?
- 18. ¿Cómo puedo desactivar la protección csrf de Django solo en ciertos casos?
- 19. Agregar encabezados a una solicitud en rieles
- 20. ¿Cómo agregar current_user a user_id a form_for en rieles?
- 21. token anti-CSRF y Javascript
- 22. Rails 3: ¿Formularios personalizados creados por el usuario?
- 23. ¿Cómo implementar la protección CSRF en llamadas Ajax usando express.js (buscando el ejemplo completo)?
- 24. Código de seguridad/protección en JavaScript
- 25. validación de formularios con Javascript a PHP
- 26. ¿GetElementById funciona en elementos creados por javascript?
- 27. Fichas CSRF: ¿cómo implementarlas correctamente?
- 28. cómo agregar una clave principal a una tabla en rieles
- 29. agregar información sobre herramientas a los controles creados mediante programación
- 30. Agregar la aplicación icono a rieles
eunikorn es ahora un enlace roto – Crisfole
Ver https://gist.github.com/3482636 para otro ejemplo de cómo esto puede ser hackeado en. no tengo ni idea de si es la misma. – Crisfole
Sí, el concepto es el mismo. –