Seguridad y tratamiento de datos
Qué debe hacer una integración para evitar filtrar el contenido de los cursos o los datos de los estudiantes.
Comprueba el acceso antes de renderizar nada
La regla es absoluta: ningún contenido de curso ni de lección sale de tu código sin una llamada a los helpers de acceso.
if ( ! function_exists( 'pom_lms_user_can_access_lesson' ) ) {
return '';
}
if ( ! pom_lms_user_can_access_lesson( $lesson_id, $course_id ) ) {
return '';
}
Esto abarca más superficies de lo que parece a primera vista: shortcodes, bloques, módulos de maquetadores de páginas, respuestas REST, feeds, sitemaps que incluyen extractos, resultados de búsqueda que muestran contenido, exportaciones y cualquier cosa que ponga la URL de un vídeo en un correo electrónico.
No vuelvas a implementar la decisión. Consulta El contrato de control de acceso.
Falla cerrando el acceso
Cuando POM LMS no está presente, cuando falta el soporte de permisos del tema o cuando una consulta falla, la respuesta segura es sin acceso.
No escribas nunca una alternativa que renderice contenido porque no se haya podido realizar una comprobación.
Las URL de los vídeos son contenido
La URL del vídeo de una lección es aquello por lo que los estudiantes han pagado. Ponerla en una página accesible, en un atributo de datos, en una respuesta de API o en una entrada de registro la publica para cualquiera que pueda leer esa superficie.
Dos verdades en torno a las cuales diseñar:
- No listado no es privado. Cualquiera con la URL puede ver un vídeo de YouTube o de Vimeo, haya comprado el curso o no.
- Un reproductor renderizado para una lección bloqueada filtra la URL, incluso si la página también muestra un mensaje de no acceso.
Comprueba el acceso antes de renderizar, no después.
El progreso son datos personales
El registro de finalización de un estudiante dice qué ha estudiado. Trátalo como si le perteneciera:
- Léelo con
pom_lms_get_course_completion()en la propia petición del estudiante. - No muestres el progreso de un estudiante a otro.
- No lo pongas en una URL, en un enlace compartido ni en una respuesta sin autenticar.
- Inclúyelo cuando atiendas una solicitud de exportación o de supresión conforme a tu política de privacidad.
No hay ninguna forma admitida de leer el progreso de otro usuario, y eso es una decisión de diseño antes que una omisión.
Escapa la salida
Todo lo que renderices desde campos almacenados debe escaparse según su contexto: esc_html() para el texto, esc_url() para enlaces y URL de vídeo, esc_attr() para atributos.
Los campos configurados por editores no son más fiables que cualquier otro contenido almacenado: una cuenta de editor puede verse comprometida y un campo de texto enriquecido puede contener marcado.
Verifica las capacidades en tus propias acciones
Cualquier endpoint, formulario o acción administrativa que añada tu integración es tuya de proteger. Comprueba que el usuario actual tiene permiso para realizarla y verifica que la petición proviene de tu propia interfaz.
Los helpers de acceso de POM LMS responden a «¿puede esta persona ver este curso?». No responden a «¿puede esta persona cambiar algo?»: eso es una comprobación de capacidad, y es independiente.
No amplíes quién puede configurar el acceso
Cualquiera que pueda editar un curso puede cambiar quién obtiene acceso a él, y cualquiera que pueda editar una lección puede publicarla para todo el mundo marcándola como vista previa.
Si tu integración ajusta roles o capacidades, tenlo presente. Conceder la edición de cursos a un grupo más amplio es una decisión de acceso, no una decisión de contenido.
Datos personales que una integración podría tocar
| Datos | Dónde viven |
|---|---|
| A qué cursos puede acceder un estudiante | Se calcula a partir de roles, reglas y pedidos: no se almacenan |
| Qué lecciones ha completado | Se almacenan por estudiante, por curso |
| Qué ha comprado | Pedidos de WooCommerce |
| Quién es | La cuenta de usuario de WordPress |
POM LMS no guarda ningún registro de inscripción, ni marcas de tiempo ni registro de actividad. Si tu integración crea algo de eso, pasa a ser tu responsabilidad bajo el régimen de privacidad que se aplique al sitio, incluida su eliminación cuando se borre un usuario.
Prueba como un estudiante real
Todo cambio relacionado con el acceso debe probarse desde una cuenta que no sea de administrador y en una ventana privada. Los roles y pedidos de un administrador dan acceso a cosas a las que los de un estudiante no, y probar con una sesión de administrador iniciada es la forma más habitual de que una filtración llegue a producción.