🎯 Objetivo del día:
Definir con precisión qué debe hacer el plugin (requisitos funcionales) y cómo debe comportarse para ser seguro (requisitos de seguridad), como parte del ciclo S-SDLC.
Este análisis permite planificar una arquitectura robusta, escalable y libre de vulnerabilidades desde la fase de diseño.
🛠️ Parte Genérica (válida para todos los alumnos)
⚙️ 1. Requisitos Funcionales
Los requisitos funcionales describen qué debe hacer el plugin. Se deben especificar:
- Funciones principales y secundarias (mínimo producto viable).
- Acciones que pueden realizar los usuarios (añadir, ver, modificar, eliminar datos).
- Roles y permisos necesarios para cada acción.
- Interacciones con otras partes del sistema WordPress (menus, shortcodes, widgets, REST API…).
- Comportamiento esperado en casos de error (por ejemplo, qué pasa si un dato obligatorio no se introduce).
📋 Tareas:
- Redactar una lista clara de funciones que debe tener la versión 1.0 del plugin.
- Definir si el plugin tendrá versión PRO y qué funciones podrían incluirse solo en esa versión.
- Especificar qué roles de usuario podrán hacer qué (administrador, editor, suscriptor, etc.).
- Si el plugin usará tablas propias, describir cómo se usará cada campo y cómo se relacionará con los usuarios de WordPress.
🔐 2. Requisitos de Seguridad
Aquí se definen las medidas para proteger los datos y el entorno de ejecución del plugin:
- Validación, sanitización y escape de todos los datos (entradas del usuario, formularios, parámetros).
- Protección frente a ataques comunes: XSS, CSRF, SQLi, acceso no autorizado.
- Uso correcto de:
current_user_can()para controlar permisos.wp_nonce_field()ycheck_admin_referer()para proteger formularios.esc_html(),esc_attr(),sanitize_text_field(), etc.
- Separación de funcionalidades públicas y privadas.
- Gestión segura de datos almacenados (tablas, opciones, registros temporales).
- Registro de actividad o logs (opcional, según el proyecto).
📋 Tareas:
- Enumerar los puntos donde el plugin recibirá datos externos (formularios, AJAX, REST, URL…).
- Indicar qué funciones de sanitización o escape se aplicarán en cada caso.
- Establecer una política de roles y permisos seguros.
- (Opcional) Pensar en un mecanismo de logs o auditoría mínima si el plugin lo justifica.
👤 Parte específica — Alumno: Pablo Macías
Proyecto: Plugin WordPress «WP Control Horario»
⚙️ Requisitos Funcionales para la versión 1.0:
- Registro de entrada y salida de jornada por parte de usuarios logueados.
- Visualización de fichajes propios por parte de cada empleado.
- Visualización completa por parte del administrador (con filtros por fecha y usuario).
- Exportación de registros en CSV.
- Configuración del horario esperado por día y notificación si no se ha fichado.
- Panel de administración con resumen semanal/mensual.
💼 Funcionalidades potenciales para versión PRO:
- Firma digital del fichaje.
- Geolocalización opcional al fichar.
- Notificaciones por correo o Slack.
- Dashboard gráfico.
- Multisite compatible.
🔐 Requisitos de Seguridad para Pablo:
- Los usuarios solo pueden ver y gestionar sus propios registros.
- El administrador tiene acceso total.
- Todos los formularios protegidos con
wp_nonce_field()y verificados concheck_admin_referer(). - Todos los datos del formulario se deben sanitizar con funciones como:
sanitize_text_field()para textos.sanitize_email()para emails.absint()para IDs.
- Escapar toda salida con
esc_html()oesc_attr(). - Los datos sensibles como la IP, ubicación o timestamps se deben registrar y almacenar de forma protegida.
- En caso de fichaje duplicado o incorrecto, el sistema debe responder con un mensaje controlado y registrar el intento.
📄 Entrega esperada (para todos los alumnos)
Un documento con:
- Nombre del plugin y objetivo funcional.
- Lista de funciones previstas en la versión 1.0 (mínimo viable).
- Lista opcional de funciones premium o avanzadas.
- Esquema de roles y permisos.
- Descripción de cada entrada/salida de datos.
- Medidas de seguridad aplicables a cada punto crítico.
- (Opcional) Mockups o bosquejo del panel de administración.
💪 Cierre
Hoy pasaste de tener solo una idea a tener un esquema funcional real de lo que tu plugin va a hacer y cómo va a proteger los datos que maneja.
Has pensado como un verdadero DevSecOps: con visión de producto, foco en la seguridad y claridad en los permisos.
Mañana completaremos esta etapa con los requisitos de negocio y el diseño preliminar del plugin. ¡Estás construyendo algo con proyección real! 🚀