Asignación masiva, ¿cómo protegerse en Laravel?

arrow_back Blog

La asignación masiva puede causar una masacre en tu base de datos, por este motivo, es algo a lo que debemos prestar mucha atención. Un ataque de asignación masiva permite insertar registros indeseados en tu base de datos, es decir, una columna role_id que tú no estás mostrando en tu formulario pero tampoco protegiendo de asignación masiva.

Imagina que tienes un formulario de registro simple y la siguiente migración para gestionar usuarios en tu base de datos.

Y su respectivo modelo User.

Ahora veamos cómo se puede explotar este fallo de seguridad si no hacemos las cosas bien. Para ello, vamos a simular un método que cree el usuario en base de datos.

El ejemplo anterior permite que un usuario pueda definir desde el formulario de registro el rol que desea tener en la aplicación, ¿cómo? Simplemente debería modificar el  formulario HTML desde el navegador y añadir un campo con el nombre role_id y un valor que haga match con un rol válido en tu base de datos.

Protegerse de asignación masiva en Laravel

Para protegernos de este tipo de ataques, lo mejor que podemos hacer es definir cada request->input que deseamos insertar en lugar de recoger todo el formulario.

Por lo tanto, nuestro método insert quedaría de la siguiente forma.

A partir de ahora, aunque modifiquen el formulario con campos que puedan existir en nuestra base de datos, no tendremos ningún problema. El motivo es que al no recoger todos los campos enviados sino sólo los que deseamos, nuestros formularios funcionaran cómo esperamos y nosotros podremos dormir tranquilos.

Otra opción para protegernos de asignación masiva en el caso anterior sería eliminar de la propiedad $fillable del modelo User la columna role_id, pero siempre siempre siempre, lo mejor es escribir los datos que deseas insertar al crear los registros.

Cursosdesarrolloweb Cursosdesarrolloweb

Cursosdesarrolloweb es una plataforma educativa con cursos y tutoriales en texto y vídeo.

Términos y condiciones Política de privacidad Formulario de contacto

Copyright 2024 © Todos los derechos reservados.

Contacto