Logotipo de seguridad

Prácticas recomendadas de seguridad de Laravel: una lista de consejos para codificar

En este blog describimos algunos errores de seguridad fáciles y cómo solucionarlos.

1. No usar HTTPS

  • ErrorServir su aplicación Laravel a través de HTTP en lugar de HTTPS la deja vulnerable a ataques de tipo "man-in-the-middle" (MITM) donde se pueden interceptar datos confidenciales.
  • Solución: Utilice siempre HTTPS en entornos de producción configurando certificados SSL y forzando HTTPS agregando esto a ($this->app->environment('production')) { \URL::forceScheme('https'); }

2. Uso de claves de cifrado débiles

  • Error:No lograr establecer un sólido CLAVE DE APLICACIÓN en el .env archivo, que es crucial para el cifrado, la seguridad de la sesión y el hash de contraseñas.
  • Solución:Establezca una clave de aplicación segura utilizando el siguiente comando:bash
    clave php artisan:generar Asegúrese de que esta clave permanezca secreta y nunca se comparta públicamente.

3. No validar los datos de entrada

  • Error:Omitir la validación de entrada puede exponer su aplicación a diversos ataques, como inyección SQL, secuencias de comandos entre sitios (XSS) y otras vulnerabilidades.
  • Solución:Utilice la validación incorporada de Laravel para garantizar que todos los datos de entrada estén desinfectados y sigan el formato esperado.php
    $request->validate([ 'email' => 'requerido|email', 'contraseña' => 'requerido|min:8', ]);

4. Almacenamiento de datos confidenciales en el código base

  • Error:Codificar datos confidenciales, como claves API, credenciales de bases de datos o tokens privados, directamente en el código base puede provocar violaciones de seguridad si el código se comparte o se expone.
  • Solución: Almacenar información confidencial en variables de entorno (.env) y use el sistema de configuración de Laravel para cargarlos. Nunca envíe los .env archivo a control de versiones.

5. Permisos de archivos inadecuados

  • Error:Permitir permisos de escritura en archivos confidenciales, como el .env archivo, puede provocar que usuarios no autorizados obtengan acceso a los datos de configuración.
  • Solución:Establezca los permisos de archivo adecuados para su proyecto de Laravel. Por lo general, querrá directorios como almacenamiento y arranque/caché para que el servidor web pueda escribir en ellos, pero otros archivos no deben poder escribirse.

6. No escapar del contenido generado por el usuario

  • Error:No escapar los datos generados por el usuario antes de representarlos en la página puede provocar ataques XSS.
  • Solución:Utilice el motor de plantillas integrado de Laravel, Blade, que escapa automáticamente la salida. Si necesita deshabilitar el escape (lo cual es poco frecuente), asegúrese de que el contenido esté correctamente depurado.
{{ $userInput }} // Escapado
{!! $userInput !!} // Sin escape (tenga cuidado)

7. No limitar la asignación masiva

  • Error:Permitir la asignación masiva de modelos sin controlar adecuadamente qué campos se pueden completar puede permitir que los atacantes modifiquen campos no deseados.
  • Solución:Utilice el $rellenable o $protegido Propiedades en sus modelos Eloquent para especificar qué campos se pueden asignar en masa.php
    protegido $fillable = ['nombre', 'correo electrónico'];

8. Exponer el modo de depuración en producción

  • Error: Partida APP_DEBUG=verdadero en el .env Los archivos en entornos de producción pueden exponer información confidencial, como seguimientos de pila, credenciales de base de datos y claves API, en mensajes de error.
  • Solución:Siempre configurado APP_DEBUG=falso en producción y considere usar el registro de errores para capturar y almacenar errores de forma segura sin revelarlos públicamente.

9. Manejo inseguro de carga de archivos

  • Error:No validar y desinfectar adecuadamente los archivos cargados puede generar cargas de archivos maliciosas, que pueden ejecutar código del lado del servidor.
  • Solución:Utilice las reglas de validación de carga de archivos de Laravel para verificar el tipo, tamaño y otros atributos de los archivos cargados.php
    $request->validate([ 'archivo' => 'requerido|archivo|mimes:jpg,png,pdf|máximo:2048', ]);

Almacene los archivos fuera del directorio público y utilice métodos seguros para acceder a ellos.

10. No implementar la limitación de velocidad

  • Error:No implementar la limitación de velocidad en rutas sensibles como el inicio de sesión o los puntos finales de API puede exponer su aplicación a ataques de fuerza bruta o ataques de denegación de servicio (DoS).
  • Solución:Utilice el middleware de limitación de velocidad integrado de Laravel para proteger sus rutas.php
    Ruta::middleware('throttle:10,1')->grupo(función () { Ruta::post('/login', 'AuthController@login'); });

11. Exposición innecesaria de puntos finales sensibles

  • Error:Dejando rutas sensibles como /telescopio/horizonte, o /administración accesible al público puede exponer valiosas herramientas de depuración o administrativas.
  • Solución: Proteja estas rutas restringiendo el acceso a través de middleware o listas blancas de IP. Por ejemplo, limite el acceso a Laravel Telescope a entornos locales:php
    si (app()->environment('local')) { Telescopio::auth(función () { devolver verdadero; }); }

12. Laravel obsoleto y dependencias

  • Error:Ejecutar versiones obsoletas de Laravel o sus dependencias puede dejar vulnerabilidades conocidas sin parchear.
  • Solución:Actualice periódicamente Laravel y sus dependencias ejecutando actualización del compository supervisar los avisos de seguridad de los paquetes que utiliza.

13. No utilizar la protección CSRF

  • Error:No implementar la protección contra falsificación de solicitudes entre sitios (CSRF) puede permitir que los atacantes engañen a los usuarios para que realicen acciones en su nombre.
  • Solución:Laravel incluye protección CSRF de forma predeterminada para todas las solicitudes POST, PUT, PATCH y DELETE que utilizan el @csrf directiva en forms.blade
    @csrf

14. No utilizar hash de contraseña seguro

  • Error:Almacenar contraseñas en texto simple o usar algoritmos hash débiles hace que su aplicación sea vulnerable si la base de datos se ve comprometida.
  • Solución:Utilice siempre Laravel cifrado (o argón2 (para mayor seguridad) para hacer hashes de contraseñas:php
    utilice Illuminate\Support\Fachadas\Hash; $hashedPassword = Hash::make($password);

15. Ignorar registros y alertas

  • Error:No supervisar los registros de aplicaciones para detectar actividades sospechosas o errores puede provocar que se pasen por alto incidentes de seguridad.
  • Solución:Revise periódicamente los registros de Laravel (almacenamiento/registros) y configurar alertas para eventos críticos. Puedes integrar Laravel con herramientas de monitoreo de terceros como Sentry o New Relic para monitoreo en tiempo real.

16. Actualización con $request->all()

Un poco similar al punto 7.

Aunque parezca realmente conveniente, cuando actualizas un usuario así:

$user->update($request->all());

Existe un riesgo de seguridad. Por ejemplo, si tiene una columna this_is_an_admin=1, un usuario puede configurar esta variable a través de la consola de desarrollador del navegador.

Sería mejor filtrar únicamente la variable $request correcta con:

$request->only(['nombre', 'boletín_suscrito']);

¿Tienes otros puntos de seguridad? ¡Cuéntanoslos en los comentarios!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESEspañol
Ir arriba