Hay millones de razones por las que los proyectos tecnológicos fracasan. Modelos de negocio mal calculados, demanda sobreestimada o costos burbujeantes, lo que sea. Pero a lo largo de mi vida profesional he visto bastantes proyectos con ideas brillantes y buen potencial desmoronarse por errores y descuidos aparentemente menores. Y creo que esta razón es la más amarga de todas, al menos para mí como desarrollador. En este artículo, quiero compartir mi experiencia y analizar los problemas y desafíos que enfrentan los desarrolladores backend al trabajar en aplicaciones web. Destacaré los puntos clave que a menudo se pasan por alto y explicaré cómo abordar estos obstáculos con la máxima eficiencia. Estoy seguro de que esto le ayudará a minimizar los riesgos y aumentar significativamente las posibilidades de éxito de su proyecto.
No importa lo obvio que pueda parecer, este punto es crucial: nunca almacene información confidencial o sensible en su código fuente. Las infracciones pueden provocar pérdidas financieras y otros problemas graves. La información confidencial que nunca debe almacenarse en código incluye:
En lugar de almacenar dicha información en el código de su proyecto, utilice variables de entorno. Para sistemas más seguros, considere utilizar soluciones sólidas de almacenamiento secreto como
Si cree que almacenar información confidencial en el código de la aplicación no es un problema grave, considere esto: solo en 2022, GitHub detectó
Solución: revisa tu proyecto ahora mismo
Si ya tiene un proyecto y ahora le preocupan los secretos de su código, existen soluciones útiles que pueden brindarle tranquilidad. Las comprobaciones manuales pueden llevar mucho tiempo, por lo que la automatización es clave. Las herramientas útiles incluyen:
Estas herramientas son sólo algunos ejemplos; otras opciones populares incluyen
Sorprendentemente, este tema rara vez se trata y algunos desarrolladores ni siquiera son conscientes de que el uso de soluciones de terceros puede generar problemas legales y problemas importantes para su empresa. ¿No me crees? Imagine este escenario: un desarrollador de una pequeña empresa incluye una biblioteca distribuida bajo el
También pueden surgir problemas graves con proyectos que utilizan bibliotecas con licencias que prohíben explícitamente el uso comercial. Y la cosa no mejora mucho si no existe ninguna licencia: de hecho, la ausencia de una licencia plantea un problema importante, ya que cualquier código está protegido por derechos de autor de forma predeterminada. Las licencias otorgan a los usuarios el derecho a utilizar el código bajo condiciones específicas, pero sin una licencia, no existe ningún fundamento legal para utilizar el código, incluso si es de acceso público.
Vale la pena señalar que los problemas de licencia pueden afectarlo de diferentes maneras según su jurisdicción: este asunto es particularmente relevante para los países que han firmado acuerdos internacionales de derechos de autor. Por ejemplo, el Convenio de Berna para la Protección de las Obras Literarias y Artísticas, uno de los principales tratados internacionales en este ámbito, cuenta actualmente con alrededor de 180 países miembros. Por lo tanto, usar código sin permiso explícito significaría violar las leyes de derechos de autor y podría dar lugar a batallas legales en muchos lugares del mundo. Sin embargo, esto no significa que debas mudarte a un país "cómodo" sólo para violar todas las reglas escritas y no escritas. Respetémonos unos a otros, y si alguien no quiere que su desarrollo sea utilizado para determinados fines, es mejor que no lo haga ni siquiera desde una perspectiva humana.
Solución: utilice comprobaciones y actualizaciones automáticas
Como puede ver, las cuestiones de licencias y derechos de autor son complejas. Para protegerse a usted y a su empresa con antelación, lo mejor es comprobar las licencias de las bibliotecas y el software que utiliza. Para las bibliotecas, esto no es demasiado difícil; Los administradores de paquetes modernos ya tienen herramientas para esto. Por ejemplo, en PHP Composer, puedes hacer esto con el comando `
Y no olvide llamar a estos comandos cuando actualice las dependencias (es incluso mejor automatizar estas comprobaciones), porque la licencia de una biblioteca conectada puede cambiar en las nuevas versiones.
En el desarrollo web, es común tener varias versiones de un proyecto, como desarrollo (dev), control de calidad (QA), puesta en escena y producción. Con frecuencia, me he encontrado con escenarios en los que cualquier persona en Internet podía acceder a las versiones de desarrollo/control de calidad y de preparación de un sitio o proyecto web. Es alarmante que a veces los motores de búsqueda puedan indexar las versiones de prueba con mayor eficacia que la versión primaria, lo que suele perjudicar al producto.
El principal problema aquí es que las versiones de prueba pueden contener errores o información confidencial, tal vez incluso comprometedora. Además, las versiones beta suelen ser más vulnerables a la piratería que la producción final. Esto significa que su disponibilidad aumenta el riesgo de que un atacante obtenga acceso a datos confidenciales, código interno o incluso al propio servidor. Esto es especialmente cierto si estás desarrollando un backend para algo como una aplicación móvil, ya que el acceso no autorizado a las versiones de prueba de la API puede ser extremadamente peligroso.
Más allá de los riesgos de seguridad, las páginas web duplicadas pueden afectar negativamente la clasificación de los motores de búsqueda. Los motores de búsqueda como Google pueden ver estos duplicados como contenido no deseado, lo que podría reducir la clasificación de las páginas originales de su proyecto o incluso eliminarlas del índice por completo.
Solución: diseñe su estrategia de seguridad desde el principio
No escatimes en dominios. Si necesita una versión de prueba accesible en línea, compre un dominio separado específicamente para ella. Esta medida simple pero efectiva reduce los riesgos de seguridad porque los atacantes generalmente verifican primero los subdominios. Alojar su versión de prueba en cualquier subdominio del recurso principal lo convierte en un objetivo fácil.
Restrinja el acceso a todas las versiones de prueba. Asegúrese de que las versiones de desarrollo, control de calidad, preparación y otras versiones no sean de acceso público. Configúrelos para que sean accesibles solo a través de una VPN, por ejemplo. Esto reduce la probabilidad de acceso no autorizado, incluso si los actores malintencionados conocen el dominio de prueba.
Proteja las versiones de prueba para que no sean indexadas. Incluso si solo se puede acceder a sus versiones de prueba a través de VPN y están alojadas en dominios secretos separados, protéjalas de la indexación de los motores de búsqueda utilizando un archivo `robots.txt` o metaetiquetas `noindex`. Este paso es crucial, ya que los motores de búsqueda a veces pueden encontrar e indexar estas páginas de formas inesperadas.
Hay reglas de seguridad que muchos desarrolladores tienden a pasar por alto, aunque son de vital importancia y se han establecido a través de lecciones aprendidas con mucho esfuerzo. Una de esas reglas es ocultar siempre la dirección IP real de su proyecto. Si la dirección IP de sus servidores se puede determinar a través del nombre de dominio, puede generar varios problemas, como:
Ataques DDoS: al conocer la dirección IP real de su proyecto, los atacantes pueden lanzar un ataque de denegación de servicio distribuido (DDoS) en su servidor. Por ejemplo, un
Identificación de posibles vulnerabilidades: los piratas informáticos serios, no sólo los aficionados, pueden escanear puertos abiertos y software expuesto en la red para encontrar y explotar debilidades. Incluso servicios conocidos como MongoDB han sufrido importantes violaciones de datos debido a una mala configuración. Muchos de estos problemas podrían evitarse simplemente ocultando la dirección IP real.
Solución: complicar la vida del atacante potencial
Al ocultar la dirección IP real de su servidor, hace que sea mucho más difícil para los atacantes atacar su sistema. El uso de una red de entrega de contenido (CDN) o servicios de protección DDoS puede resultar muy eficaz en este caso. Las opciones populares incluyen
Si bien estas herramientas pueden mejorar significativamente la seguridad, hay consideraciones adicionales a tener en cuenta:
Fuga de IP del encabezado del correo electrónico: si utiliza su servidor principal para enviar correos electrónicos, la dirección IP real puede quedar expuesta en los encabezados del correo electrónico, lo que arruinará sus esfuerzos de seguridad.
Historial de IP y solicitudes de Whois: servicios como
Protección DDoS y puntos finales API: tenga cuidado al utilizar la protección DDoS para dominios que sirven como puntos finales API. Los sistemas de protección pueden introducir pasos de verificación de usuario que podrían interrumpir el funcionamiento de sus aplicaciones del lado del cliente al reemplazar las respuestas JSON/XML con código HTML.
Solicitudes de API salientes: cuando su servidor envía solicitudes a API de terceros, puede revelar inadvertidamente su dirección IP. El uso de servidores proxy para dichas solicitudes puede ayudar, ya que cambiar un proxy es más fácil que lidiar con las consecuencias de un ataque.
Es importante recordar que ocultar la dirección IP real de su proyecto no es una panacea. Cerrar los puertos utilizados por su software desde la red externa es crucial siempre que sea posible. Cambiar los puertos estándar es una práctica discutible; algunos expertos argumentan que complica la configuración sin beneficios significativos. A menudo, es preferible configurar el software para interactuar a través de sockets Unix en lugar de conexiones de red TCP (si tanto su proyecto como el software se ejecutan en el mismo servidor). Este enfoque no sólo aumenta la velocidad de interacción sino que también mejora la seguridad al eliminar la necesidad de puertos abiertos.
Para sistemas de administración de bases de datos (DBMS) u otros servicios internos en servidores separados, asegúrese de que el acceso esté restringido a direcciones IP específicas que usted controle estrictamente. Esta configuración evita el acceso no autorizado a sistemas críticos, agrega una capa de seguridad adicional y minimiza los riesgos de ataques externos y fugas de datos.
Este consejo es bastante sencillo pero, una vez más, a menudo se pasa por alto: actualice periódicamente las dependencias y el software del servidor de su proyecto. El código obsoleto y vulnerable es el sueño de los atacantes que pueden explotarlo fácilmente.
Solución: automatice sus actualizaciones
No es necesario actualizar todo manualmente; Muchas herramientas de automatización pueden ayudar. Por ejemplo,
Automatizar la renovación de los certificados de seguridad también es crucial. Si utiliza
\El mismo principio se aplica al software de servidor. Si está trabajando con Linux, especialmente distribuciones basadas en Debian/Ubuntu,
Los consejos que se proporcionan aquí son sólo una fracción de lo que los desarrolladores de backend deben recordar. Elegí resaltar temas cruciales pero que se discuten con menos frecuencia en comparación con los comunes como
Para una comprensión más profunda de la seguridad de las aplicaciones web, considere explorar el
Creo que la comunidad de desarrolladores debería estar bien informada y ser solidaria a la hora de compartir ideas y experiencias. Por lo tanto, invito a todos a compartir sus observaciones y comentarios, ¡que son valiosos para todos los que trabajan en el desarrollo backend!