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

Fecha de publicación: noviembre 13, 2021

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on google
Google+
Share on whatsapp
WhatsApp
Share on email
Email

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 el siguiente formulario de registro, algo típico y simple.

Formulario de registro

Ahora imagina que tienes 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.

¿Quieres acceder a más de 150 cursos de PHP y JavaScript?

¿Quieres ganar tiempo en tus desarrollos con nuestros proyectos descargables?


Vue, Laravel, Inertia, NodeJS, WordPress, Serverless, React Native, Amazon Web Services y mucho más

Hazte Premium y consigue acceso completo
Cursosdesarrolloweb ©. Todos los derechos reservados.

Login

Create an Account Back to login/register