Nada malo en el código. Algo malo en cómo se ejecuta.
Aquí: APP_DEBUG=true en producción, que convierte cada 500 en una página que muestra rutas de archivos, consultas y valores del entorno. CORS dejado en su valor abierto por defecto. La documentación de la API del Capítulo 15 legible desde internet. Un archivo .env servido por un servidor web mal configurado.
Qué lo impide: hay menos cosas automáticas de lo que la gente supone.
- El
.env.exampledel que parte todo proyecto tieneAPP_DEBUG=trueyAPP_ENV=local. Producción debe fijar ambos. El Capítulo 20 hace que la aplicación se niegue a servir con el modo debug activado en cualquier sitio que no sea la máquina de un desarrollador. - La configuración de CORS de Laravel permite de fábrica todos los orígenes en
api/*. El Capítulo 6 la cerró. - El 404 por defecto nombra las clases de tus modelos. El Capítulo 7 lo reemplazó.
- La documentación está detrás de un Gate, y el Capítulo 15 dijo que lo verificaras desde fuera.
Cómo lo sabes:
php artisan about
Ejecútalo en producción y léelo: entorno, modo debug, drivers de caché y de cola. Después, desde fuera, pide una URL que no existe y una que lanza una excepción, y lee las respuestas como lo haría un atacante. Si tú aprendes algo del servidor con ellas, también lo aprende cualquier otro.
9. Gestión de inventario inadecuada
No puedes proteger lo que has olvidado que tienes en marcha.
Aquí: la versión v1, obsoleta y todavía respondiendo. Un servidor de staging con datos de producción y una configuración más débil. Un token emitido para una migración hace dos años. Un endpoint añadido para una demo.
Qué lo impide: el Capítulo 16 retira las versiones borrándolas. El Capítulo 15 genera la documentación a partir de las rutas, así que un endpoint que existe es un endpoint que está listado. El Capítulo 4 hace caducar los tokens.
Cómo lo sabes: compara tres listas: las rutas que tiene la aplicación, las rutas que muestra la documentación y las rutas que recibieron tráfico el mes pasado. Lo que esté en la primera y no en la tercera es candidato a borrarse. Lo que esté en la tercera y no en la segunda es una sorpresa.