banner Seguridad en Laravel y tu rol como programador

La seguridad es un tema de gran importancia cuando desarrollamos productos digitales que puede determinar, más allá del buen funcionamiento, el éxito o fracaso de un proyecto. Recuerda que el activo más importante de una empresa es su información.

¿Estás creando aplicaciones seguras?

Ocasionalmente el título de programadores «backend» o «frontend» son tomados muy a pecho y algunos deciden dejar en manos del «sys-admin» de la organización todas las responsabilidades referentes al tema de la seguridad, pero la realidad es que en caso de que ocurra una violación al sistema, estas responsabilidades se comparten por igual.

Seguridad en Laravel

Para quienes trabajan con Laravel, probablemente ya estarán familiarizados con todas las herramientas que el framework ofrece para ayudar con el tema de seguridad como protección CSRF (Cross-Site Request Forgery), Hashing, encriptación de cookies, etc.

Ademas de esto existen otras «buenas prácticas» recomendadas no solo para el desarrollo de aplicaciones en Laravel sino para programación en general, como lo es la exclusión de datos sensibles de los repositorios (públicos o privados) utilizando Git, uso de archivos de configuración locales (como es el caso de los archivos .env en Laravel), etc.

¿Dónde ocurren las fallas más graves?

Aunque parezca increíble, las fallas ocurren en las tareas básicas como pueden ser la configuración de permisos en los directorios de nuestras aplicaciones. Se sorprenderían al saber la cantidad de aplicaciones que se encuentran funcionando en producción y que tienen fallas de seguridad por este tema. ¿Difícil de creer? Hace algunos meses asistí a una conferencia donde se abordaban entre otras cosas, algunos temas sobre la seguridad y la vulnerabilidad de los datos y la información personal en Internet. Para mi sorpresa, esto sería ejemplificado a través de una rápida búsqueda en Google revelando dichas vulnerabilidades principalmente en aplicaciones desarrolladas en Laravel.

Aquí les comparto el video de la conferencia donde se hablan temas referentes a la seguridad de datos en la web y se muestran algunos ejemplos prácticos de cómo se pueden obtener dichos datos si no contamos con la protección apropiada y cuáles son los mecanismos usados comúnmente para el robo de información que pueden ir desde el hackeo de una red hasta una fotografía compartida en Twitter o Facebook.

Fallas de seguridad «comunes» en Laravel

Error #1: escribir credenciales dentro del código de la aplicación.

El framework ofrece una forma «segura» de tratar la información sensible de la aplicación como claves de acceso, llaves de autenticación, entre otros, para mantener dichos datos separados de la lógica del proyecto, para ello hacemos uso del directorio de configuración. Por ejemplo, si vas al archivo config/mail.php verás que allí se deben especificar las credenciales de la cuenta de email que será usada para el envío de correos por la aplicación:

'username' => '[email protected]',
'password' => 'password',

Pero en lugar de escribir de forma explícita dichas credenciales, se hace uso, a su vez, del  helper env() que nos da acceso a las variables definidas dentro del archivo .env del proyecto.

'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),

De esta forma podemos tener todas estas credenciales en un archivo independiente que podemos excluir del repositorio del proyecto:

APP_ENV=local
APP_KEY=base64:NjsM0vUbzk+FkVZgY3Wasfd323fsdSRVlQRRwaK2iH8=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=newproject
DB_USERNAME=root
DB_PASSWORD=password123

Error #2: No excluir el archivo de configuración del repositorio del proyecto.

Como el 95% de los programadores, de seguro estarás haciendo uso de algún controlador de versiones como Git o Mercurial. En el caso de Git puedes excluir archivos o directorios enteros del control de versiones (y a su vez mantenerlo fuera de tus repositorios remotos) editando el archiv .gitignore de la siguiente manera:

/node_modules          
/public/storage        
/vendor                
/.idea                 
Homestead.json         
Homestead.yaml         
.env

Para más información revisa el Curso de Git y GitHub

Error #3: Dejar archivos de tu aplicación en el directorio público y/o otorgar permisos de lectura a todos los archivos y directorios.

Cuando la permisología del directorio de Laravel no se configura de forma correcta (por ejemplo otorgando permisos 777 o colocando todos los archivos de tu proyecto en el directorio público), cualquier usuario podría obtener acceso a dichos archivos incluso desde el mismo navegador, incluso dichos archivos podrían ser indexados por los buscadores y posteriormente ser encontrados a través de Google, tal cual como lo vimos en el video anterior.

En el curso Curso de administración de servidores para PHP y Laravel creado por @dimitri_acosta se explican paso a paso todas las tareas necesarias para configurar correctamente nuestro servidor web y como instalar y configurar aplicaciones de Laravel en dicho servidor.

Tu rol como programador

No basta con crear aplicaciones funcionales, bien estructuradas, escalables, etc. Debemos también asegurarnos de que sean estables, seguras y accesibles; y es parte de tu responsabilidad como programador. Cada proyecto desarrollado es parte de tu tarjeta de presentación, para bien o para mal así que vale la pena el esfuerzo.

A menudo recuerdo una frase que dice «quien sabe mucho de una sola cosa, sabe muy poco de muchas otras cosas».

Styde.net es una comunidad que ha crecido con una clara tendencia al desarrollo web con PHP y Laravel, pero con el tiempo ha ido incluyendo material de otras tecnologías que se creen necesarias para mejorar el perfil del programador y así permitir que sea mucho más integral. Cuando entendemos las demás tecnologías que forman parte del ecosistema de nuestras aplicaciones podemos mejorar y prevenir fallos y errores durante el desarrollo.

El desarrollo web es un largo maratón de conocimiento, es lo que hace de esta profesión algo interesante, no se trata de aprender todas las tecnologías disponibles, tampoco se trata del hecho de que si no las aprendes no podrás ser un buen programador, se trata de «conocer» el ecosistema del cual forman parte tus aplicaciones.

¿Estás listo para crear proyectos mucho más seguras?

Material Recomendado:

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.