Saltar a contenido

Guía de Desarrollo Seguro en Flexygo

1. Principio de mínimo privilegio (obligatorio)

Todo objeto, proceso o personalización DEBE crearse aplicando el principio de mínimo privilegio.

  • Definir explícitamente roles con acceso y sus permisos de lectura, escritura y eliminación
  • Evitar objetos accesibles por todos los usuarios.
  • No confiar en la visibilidad del botón como control de seguridad.
  • Bloquear ejecución directa por URL si no procede.
  • No abrir objetos innecesarios en la API.

2. Integración de Flexygo en un ciclo CI/CD

Flexygo debe integrarse en un pipeline de CI/CD para garantizar calidad y seguridad continua.

  • Control de versiones mediante paquetes NuGet.
  • Usar repositorios centralizados (Git).
  • Definir una política de Hotfix.

3. Inclusión de tests en el CI/CD

Todo desarrollo debe incluir pruebas automatizadas, adaptadas a la naturaleza low-code de Flexygo.

  • Desarrolla test de interfaz para garantizar la funcionalidad completa y accesos.
  • Test unitarios para probar las DLLs o storeds.
  • Incluye la ejecución de los test nativos de Flexygo para garantizar la estructura de la herramienta.
  • Añade tests de carga si vas a trabajar en entornos de muchos usuarios.

4. Protección de contraseñas y secretos

Es obligatorio garantizar que ninguna contraseña o secreto sale al exterior.

Prohibido:

  • Hardcodear contraseñas en código, SQL o configuración.
  • Enviar credenciales por logs o errores.
  • Subir contraseñas al control de código.

Obligatorio:

  • Añadir controles en el pipeline que:
    • Busquen patrones de secretos en el código.
    • Bloqueen el despliegue si se detectan.

5. Auditoría

5.1 Activación de auditoría

Activar auditoría en todos los objetos que:

  • Manejen datos sensibles
  • Permitan cambios críticos
  • Afecten a procesos de negocio clave

6. Desarrollo seguro de DLLs

Cuando se desarrollen DLLs personalizadas, se deben cumplir estrictamente las siguientes normas.

6.1 Acceso a base de datos

Usar exclusivamente:

  • SQL parametrizado
  • Stored Procedures

Prohibido el SQL dinámico construido por concatenación.

❌ Incorrecto:

C#
string sql = "SELECT * FROM Clientes WHERE Id = " + id;

✅ Correcto:

C#
SqlCommand cmd = new SqlCommand("GetClienteById", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Id", id);

7. Checklist de revisión

Antes de desplegar a producción asegúrate que cumples estos puntos:

  • [ ] Se aplica mínimo privilegio en todos los objetos
  • [ ] Flexygo integrado en CI/CD
  • [ ] Tests ejecutados correctamente en el pipeline
  • [ ] No existen contraseñas ni secretos expuestos
  • [ ] Auditoría activada donde corresponde
  • [ ] DLLs usan SQL parametrizado o stored procedures