Escapado, saneamiento y capacidades

Requisitos del código que amplía POM Events. Los datos de los asistentes hacen que esto sea más estricto que una integración típica de WordPress.

Capacidades

Comprueba la capacidad que coincide con la acción, no el nombre de un rol:

Acción Capacidad
Leer o escribir un evento edit_post para ese evento
Gestionar eventos en general edit_posts
Leer datos de asistentes edit_post para el evento al que pertenecen
Modificar la pantalla de ajustes manage_options
Gestionar las cuentas de usuario creadas por el registro edit_users

Los datos de los asistentes pertenecen al evento. Cualquiera que pueda editar el evento puede verlos, así que una integración no debe ampliar ese alcance, por ejemplo exponiendo los datos de los asistentes en una pantalla con un requisito inferior.

Nonces

Verifica un nonce en cada petición que modifique el estado y que añadas: un formulario de administración, un endpoint AJAX, un enlace que realice una acción.

Nunca te fíes de la presencia de un parámetro como autorización. En los endpoints que sean tuyos, verifica el nonce y la capacidad, en ese orden, antes de tocar los datos.

Saneamiento de la entrada

Valor Función
Texto libre sanitize_text_field()
Texto de varias líneas sanitize_textarea_field()
Correo electrónico sanitize_email()
URL esc_url_raw()
Entero absint()
Clave o slug sanitize_key()
Fecha Valida el formato antes de almacenar

Sanea en el momento de la entrada. Nunca almacenes sin procesar lo que llegó de una petición.

Escapado de la salida

Contexto Función
Texto HTML esc_html()
Atributo esc_attr()
URL esc_url()
Textarea esc_textarea()
Texto enriquecido que pretendes permitir wp_kses_post()

Los valores proporcionados por los asistentes (nombres, comentarios, teléfonos, países) son datos de visitantes que se muestran en la administración. Escapa todos y cada uno de ellos, en la tabla de asistentes y en cualquier otro lugar donde los imprimas.

Los valores de exportación no son HTML

Las exportaciones se escriben en un archivo, no en una página. No escapes los valores como HTML ahí; sanéalos como texto.

Ten en cuenta que la exportación utiliza puntos y comas como separadores, de modo que un valor que contenga uno afecta al archivo. Los comentarios de texto libre son el riesgo realista.

Datos personales

Los registros de asistentes contienen nombres, direcciones de correo electrónico, números de teléfono, países y comentarios de texto libre que con frecuencia incluyen información sanitaria, de accesibilidad y dietética.

Reglas para las integraciones:

  1. No expongas los datos de los asistentes públicamente. Ni en una respuesta REST, ni en un shortcode, ni en una página.
  2. No añadas event_assistants a una ruta REST pública. Deliberadamente no está registrada para REST.
  3. No lo registres en logs. La salida de depuración persiste en lugares que nadie audita.
  4. No lo envíes a un servicio externo sin una base legal y una decisión del propietario del sitio.
  5. Restringe cualquier pantalla que construyas a la misma capacidad que el editor del evento.
  6. Considera lo que tu integración añade a las exportaciones, ya que esos archivos circulan.

Correos electrónicos que envías

Si implementas el correo de confirmación que el plugin no envía:

  • envíalo a la dirección del registro y a ningún otro lugar;
  • no incluyas los datos de otros asistentes;
  • no añadas personas a listas de marketing basándote en el registro de un evento a menos que tu texto de consentimiento lo cubra;
  • escapa el contenido, y recuerda que el cuerpo de un correo electrónico no es un lugar seguro para la entrada sin filtrar de los visitantes.

Endpoints AJAX

Si añades uno:

  • verifica un nonce;
  • verifica la capacidad;
  • sanea todos los parámetros;
  • devuelve únicamente lo que el solicitante tiene derecho a ver;
  • mantén los datos de los asistentes fuera de cualquier endpoint no autenticado.

Multisitio

Los eventos, los asistentes y los ajustes son por sitio. Una integración que consulte a través de una red debe cambiar de sitio explícitamente y volver a comprobar las capacidades en cada uno.

Una lista breve de revisión

  • [ ] Cada petición que modifica el estado comprueba un nonce y una capacidad.
  • [ ] Cada entrada se sanea con la función adecuada.
  • [ ] Cada salida se escapa para su contexto.
  • [ ] Los datos de los asistentes nunca se muestran públicamente.
  • [ ] Nada personal se escribe en los logs.
  • [ ] Las exportaciones que amplías contienen únicamente lo previsto.
  • [ ] La integración está protegida con post_type_exists( 'event' ).