Seguridad y capacidades
Fenómenus sigue el modelo estándar de WordPress: comprobaciones de capacidades en cada acción, nonces en cada petición que modifica el estado, entrada saneada y salida escapada.
Capacidades
| Área | Capacidad requerida |
|---|---|
| Elementos del menú: crear, editar, ordenar, duplicar, estado, precios | edit_posts |
| Eliminar un elemento del menú | delete_posts |
| Categorías: crear, renombrar, reordenar, eliminar | manage_categories |
| Asignar una categoría durante la importación masiva | La capacidad assign_terms de la taxonomía |
| Pantallas de ajustes | edit_posts |
| Asistente de configuración | edit_posts |
| Generador de QR, generador de PDF, herramientas de IA | edit_posts |
| Editar el indicador de perfil de otro usuario | edit_user de ese usuario |
Fenómenus nunca concede una capacidad que la cuenta no tenga ya, con una excepción deliberada descrita a continuación.
El perfil Basic
Un indicador por usuario, almacenado por sitio en multisitio, que reduce la administración al trabajo con menús. Cuando está activado, estas áreas se eliminan y se bloquean por URL directa:
Entradas, Páginas, la pantalla estándar de nueva entrada, Medios, Comentarios, Apariencia, Plugins, Usuarios, Herramientas, Ajustes y la pantalla de ajustes de idioma.
La gestión de medios sigue funcionando desde dentro de un elemento, porque los endpoints de subida no se bloquean deliberadamente.
La excepción mencionada anteriormente: una cuenta con el perfil Basic que ya posee una capacidad de edición de entradas o páginas recibe las capacidades necesarias para gestionar las traducciones de contenido y sus slugs, de modo que un editor restringido pueda seguir manteniendo menús traducidos.
Nonces
Cada petición que modifica el estado está protegida con nonce, incluidas las operaciones de elementos y categorías, el guardado de orden, los cambios de estado, las actualizaciones de metadatos en línea, la duplicación, la eliminación, las exportaciones, las importaciones masivas, el guardado de alérgenos, el guardado de ajustes, los pasos del asistente de configuración, las peticiones de datos QR, las peticiones de contenido y ajustes del PDF y las herramientas de IA.
Entrada y salida
- Los títulos y los valores de texto se sanean al guardar.
- Las áreas de texto que permiten HTML se sanean contra el conjunto permitido; el resto se almacena como texto plano.
- Las URLs se sanean como URLs, incluidos los valores de logotipo, imagen, vídeo y URL personalizada.
- Las imágenes subidas para el análisis de la carta de vinos se validan contra una lista blanca explícita de tipos MIME: JPEG, PNG, GIF y WebP.
- La salida se escapa en el punto de renderizado.
El límite de la petición de IA
Las peticiones al servicio de IA se firman con la licencia y el dominio del sitio, a través de un único límite de petición en lugar de una construcción de peticiones por función. La falta de licencia, la falta de dominio y la configuración no válida producen cada una un error explícito en lugar de una petición sin firmar o parcial.
Ninguna clave de licencia se renderiza en una página, y ninguna herramienta de IA escribe contenido sin que el operador lo guarde.
Datos orientados al visitante
Fenómenus no recopila nada de los visitantes. La selección del filtro de alérgenos, la preferencia de visibilidad de iconos y la colección de favoritos se almacenan en el propio navegador del visitante, no se transmiten al sitio como identidad y no son legibles por el restaurante.
La vista de favoritos se renderiza a partir de los datos que el navegador envía con la petición; no hay ningún registro en el lado del servidor.
Ámbito en multisitio
Los menús, los ajustes, las bibliotecas de alérgenos, la habilitación de herramientas y el indicador del perfil Basic son por sitio. Un usuario restringido en un restaurante no está restringido en otro a menos que el indicador esté activado también allí.
Orientación para integraciones
- Comprueba la misma capacidad que el producto verifica para la acción equivalente.
- Verifica un nonce en cualquier petición que modifique el estado que añadas.
- Sanea en la entrada, escapa en la salida; no confíes en que los valores almacenados sean seguros.
- Nunca expongas públicamente los precios de vinos de referencia del mercado.
- Nunca construyas un endpoint que devuelva datos del menú con la identidad del visitante adjunta — el producto deliberadamente no tiene ninguna.
- Trata los datos de alérgenos como relevantes para la seguridad: nunca los derives, nunca los pongas por defecto, nunca los publiques sin revisar.