Consentimiento de cookies, GDPR y Discourse

:books: Esta es una guía explicativa que describe cómo los aspectos técnicos de GDPR y el consentimiento de cookies funcionan dentro de Discourse, junto con opciones para la gestión del consentimiento de cookies y servicios de administración de contenido.

:warning: Este documento no es una guía exhaustiva sobre todos los detalles que implica el GDPR. Discourse no tiene la intención de que esta guía se utilice como asesoramiento legal para ningún usuario o cliente. Discourse no puede determinar el cumplimiento legal del GDPR ni de ninguna otra ley de consentimiento de cookies para su situación o caso de uso individual.

:spiral_notepad: Discourse ahora utiliza una directiva CSP de “Strict Dynamic”, por lo que ya no es necesario (ni posible) agregar URLs individuales a la configuración del sitio Content security policy script src. Para más detalles, consulte Content-Security-Policy now uses 'strict-dynamic'.

Cookies en Discourse

Para entender cómo Discourse utiliza las cookies, consulte la sección de cookies de nuestro aviso de privacidad.

Cookies Esenciales

Por defecto, Discourse solo establece cookies necesarias para su funcionalidad básica, que es permitir que los usuarios se comuniquen entre sí y con el mundo, publicando contenido en internet.

Cookies de Terceros

Por defecto, Discourse no utiliza cookies para análisis, ni utiliza cookies de seguimiento entre sitios ni de segmentación publicitaria. Sin embargo, los administradores del sitio pueden optar por agregar otras cookies a su sitio de Discourse (por ejemplo, Google Analytics, redes publicitarias, píxeles de seguimiento, etc.).

Si se agregan scripts de terceros a Discourse que introducen cookies, es responsabilidad del equipo administrativo del sitio encontrar una solución de gestión de cookies compatible con el GDPR o abordar las cookies que puedan requerir consentimiento bajo el GDPR.

Banners de Consentimiento de Cookies

Si desea integrar un banner de consentimiento de cookies en su instancia de Discourse, puede seguir las guías que hemos elaborado para algunos de los más populares a continuación.

:loudspeaker: Referenciar un script JS de terceros en su sitio esencialmente otorga a ese tercero acceso de administrador completo al sitio, lo que representa un riesgo de seguridad potencial.

:warning: Si planea utilizar uno de estos métodos para gestionar el consentimiento de cookies, deberá determinar si funcionan de una manera que se adapte a sus necesidades y a los requisitos legales de su sitio.

Osano

Vaya a Plans & Pricing | Osano, elija un plan y cree una cuenta.

Después de crear la cuenta, recibirá un correo electrónico con credenciales temporales. Inicie sesión con esas credenciales; luego se le pedirá que establezca una nueva contraseña.

Será dirigido al panel de control de Osano. Haga clic en Gestión del consentimiento y agregue una nueva configuración de consentimiento.

Complete el nombre del gestor, la URL del sitio que desea rastrear y la URL de la política de cookies de su sitio. Por defecto, la política de cookies de Discourse se puede encontrar en la página de Privacidad en https://<tu-sitio>/privacy.

Después de hacer clic en Crear configuración, aparecerá una ventana emergente con el código para el banner. Puede agregarlo ahora a Discourse o esperar más tarde. El banner no se mostrará a los usuarios hasta que lo publique desde el panel de control de Osano.

Puede agregar el script a Discourse a través de un componente de tema o modificando su tema directamente.

Para agregar el banner a Discourse, vaya al panel de administración, Personalizar → Temas → Componentes y haga clic en Instalar.

Haga clic en Agregar CSS/HTML y agregue el código a la sección Head.

Si el código se agregó correctamente a su foro, verá que el estado de su gestor ahora dice Live (En vivo) pero Your script is not yet active (Su script aún no está activo). El gestor también está en Mode Discovery/Listener (Modo Descubrimiento/Escucha); esto está bien por ahora. Mientras el gestor esté en este modo, el banner no se mostrará en su sitio.

Vuelva al panel de control de Osano. En las siguientes secciones, puede personalizar los aspectos de su banner de consentimiento. Al hacer clic en el mapa, puede ver cómo se mostrará el banner en diferentes países.

Osano detecta automáticamente el país desde el cual un usuario visita el sitio y ajusta la apariencia del banner según las leyes de privacidad regionales.

Por ejemplo, al conectarse desde Venezuela, el banner de cookies es simple y desaparece automáticamente después de cierto período de tiempo:

Pero desde los Países Bajos, un país de la UE, el banner tiene más opciones:

También existe la opción de agregar un widget de cookies que muestre más detalles sobre las cookies.

Una vez que sus personalizaciones estén listas, haga clic en Guardar cambios, luego en Publicar y finalmente en Limpiar y publicar.

Vaya a la sección Scripts y clasifique cualquier script detectado en su sitio. Por ejemplo, en mi sitio de Discourse, solo se detectaron URLs de CDN, que se clasifican como Essential (Esenciales). Cualquier otro servicio de terceros que pueda estar ejecutándose en su sitio debe clasificarse en consecuencia.

Lo mismo aplica para cualquier cookie detectada. Por ejemplo, si tiene Google Analytics en su sitio, detectará las cookies _ga, que deben clasificarse como Analytics (Análisis).

Puede tardar un poco en que Osano detecte las cookies y scripts que se ejecutan en su sitio; también es posible que deba navegar por las diferentes secciones de su foro para asegurarse de que el fragmento de código de Osano se ejecute en todas partes.

Las cookies y scripts detectados pueden cambiar con el tiempo; recibirá una notificación por correo electrónico de Osano pidiéndole que actualice su clasificación de la siguiente manera: Configuration 'Cookie test' is running unclassified scripts, iframes and/or cookies. (La configuración ‘Cookie test’ está ejecutando scripts, iframes y/o cookies sin clasificar).

Una vez que la clasificación esté lista, cambie el modo a Permisivo (recomendado) o Estricto y publique la configuración. El banner ahora será visible para sus usuarios :tada:

image

Aprenda más sobre los modos de configuración de cookies aquí: compliance-modes-listener-permissive-strict | Customer Portal

Dado que Osano utiliza web workers, también necesitamos agregar blob: a la directiva worker-src. Esto debe hacerse a través de un tema o componente personalizado; consulte la sección ‘Extender la CSP predeterminada’ en Mitigate XSS Attacks with Content Security Policy.

En resumen, debe crear un componente de tema vacío con los siguientes parámetros en el archivo settings.yml:

# settings.yml
extend_content_security_policy:
  type: list
  default: "worker_src: blob:"

:loudspeaker: Si su banner no se está mostrando, consulte la sección Depuración de CSP.

One Trust

Vaya a Cookie Consent | Products | OneTrust; puede registrarse gratis para su primer dominio o iniciar una suscripción de pago desde la página de precios.

Recibirá un correo electrónico de bienvenida a OneTrust con un enlace para iniciar sesión en la plataforma; esto le guiará a través de la configuración de su cuenta.

Será dirigido a https://app.onetrust.com/welcome. En las secciones Avalaible Apps (Aplicaciones disponibles) o My Apps (Mis aplicaciones), elija la de Cookie Compliance (Cumplimiento de cookies).

Seleccione Add Website (Agregar sitio web).

Agregue la URL de su sitio web.

Inicie el escaneo y luego seleccione su(s) audiencia(s): los marcos de privacidad con los que necesita cumplir (como el GDPR).

En las siguientes secciones, puede personalizar los aspectos de su banner y agregar su propia marca. Guarde sus cambios y publíquelos cuando esté listo.

Para agregar el banner a Discourse, vaya a la sección Integration (Integración) en el menú lateral y seleccione su sitio de la lista.

Copie el script Production CDN de Production Scripts (Scripts de producción):

Puede agregar el script a Discourse a través de un componente de tema o modificando su tema directamente.

Vaya al panel de administración, Personalizar → Temas → Componentes y haga clic en Instalar.

Haga clic en Agregar CSS/HTML y agregue el código que copió a la sección Head.

¡Y eso es todo! El banner debería verse algo así:

:loudspeaker: Si su banner no se está mostrando, consulte la sección Depuración de CSP.

ConsentManager

Vaya a Free test now! - ConsentManager GDPR solution y cree una cuenta. Siga el asistente para configurar el gestor de consentimiento.

En el paso 4, antes de hacer clic en el botón Continuar, desplácese hacia abajo en la página. Debajo de la sección “Choose your system” (Elija su sistema), verá una sección llamada “Setup using copy & paste” (Configuración usando copiar y pegar). Elija la pestaña Semi-Automatic blocking (Bloqueo semiautomático) y copie el código de esa sección.

Puede agregar el script a Discourse a través de un componente de tema o modificando su tema directamente.

Vaya al panel de administración, Personalizar → Temas → Componentes y haga clic en Instalar.

Haga clic en Agregar CSS/HTML y agregue el código que copió a la sección Body (Cuerpo).

¡Y eso es todo! El banner debería verse algo así:

:loudspeaker: Si su banner no se está mostrando, consulte la sección Depuración de CSP.

Componente de Tema para Banner de Consentimiento de Cookies

Este componente de tema le permitirá agregar un banner de consentimiento de cookies personalizable a su foro. Simplemente proporciona una forma fácil para que los administradores de Discourse utilicen el banner de consentimiento de cookies de código abierto de Insites.

Para instrucciones sobre cómo instalar componentes de tema de Discourse, consulte: Installing a theme or theme component

Depuración de CSP

Si su banner de consentimiento de cookies no se muestra:

  1. Verifique los errores de la consola del navegador: Busque errores relacionados con CSP en la consola de su navegador.
  2. Verifique el método de carga del script: Asegúrese de que su script de consentimiento de cookies se esté cargando correctamente:
    • Los scripts agregados a los encabezados del tema son automáticamente de confianza.
    • Los scripts cargados dinámicamente mediante loadScript() o elementos de script creados programáticamente funcionarán con strict-dynamic.
    • Evite los scripts “parser-inserted” (inyección directa de HTML con etiquetas de script).
  3. Configuraciones especiales: Algunos gestores de consentimiento pueden requerir configuraciones especiales o tener requisitos específicos para funcionar con CSP. Consulte su documentación sobre compatibilidad con CSP.
  4. Unsafe-eval: Si su script de consentimiento de cookies requiere unsafe-eval, aún puede agregarlo a la configuración content security script src (con comillas: 'unsafe-eval').

:warning: Tenga cuidado al agregar 'unsafe-eval' u otras directivas permisivas, ya que pueden reducir la efectividad de CSP.

Si continúa experimentando problemas después de estos pasos, es posible que necesite verificar si su proveedor de consentimiento de cookies es compatible con las implementaciones modernas de CSP o contacte a su soporte para obtener asistencia.

Otras Opciones de Servicios de Administrador de Contenido

Además de las opciones mencionadas anteriormente para la gestión de cookies, otras opciones de servicios de gestores de consentimiento que pueden funcionar con Discourse incluyen:

Política de Cookies

Esta guía explica cómo agregar la Política de Cookies de diferentes proveedores a la página /privacy en Discourse.

One Trust

Nota: Puede leer los pasos sobre cómo configurar una cuenta de OneTrust y crear un componente de tema en la sección anterior.

  • Habilite el soporte SPA en su cuenta de OneTrust siguiendo las instrucciones descritas aquí.

  • Agregue los siguientes dos bloques de código, uno debajo del otro, a la sección Head del componente de tema.

  • Nota: Las dos funciones clearDup y reloadOTBanner se tomaron de esta página. Asegúrese de usarlas. La versión de esas funciones en el código a continuación es solo un ejemplo y podría estar desactualizada al momento de leer esto.

      <script type="text/x-handlebars" data-template-name="/connectors/below-static/add-cookie-policy">
          <div id="ot-sdk-cookie-policy"></div>
      </script>
    

      <script type="text/discourse-plugin" version="0.10.0">
          //DEBE USARSE SOLO EN POLÍTICA DE COOKIES. EJECUTE LA FUNCIÓN ABAJO PARA ELIMINAR CATEGORÍAS DUPLICADAS
          // script tomado de: https://my.onetrust.com/s/article/UUID-69162cb7-c4a2-ac70-39a1-ca69c9340046?language=en_US#UUID-69162cb7-c4a2-ac70-39a1-ca69c9340046_section-idm45403310539216
      
          function reloadOTBanner() {
      
              var otConsentSdk = document.getElementById("onetrust-consent-sdk");
              if (otConsentSdk) {
                  otConsentSdk.remove();
              }
      
              if (window.OneTrust != null) {
                  OneTrust.Init();
      
                  setTimeout(function() {
                      OneTrust.LoadBanner();
      
                      var toggleDisplay = document.getElementsByClassName(
                          "ot-sdk-show-settings"
                      );
      
                      for (var i = 0; i < toggleDisplay.length; i++) {
                          toggleDisplay[i].onclick = function(event) {
                              event.stopImmediatePropagation();
                              window.OneTrust.ToggleInfoDisplay();
                          };
                      }
                  }, 1000);
              }
          }
          function clearDup() {
              var sec = document.getElementById("ot-sdk-cookie-policy")
              var tally = [];
              for (var i = sec.length - 1; i >= 0; i--) {
                  if (tally[sec[i].firstChild.innerText] === undefined) {
                      tally[sec[i].firstChild.innerText] = 1;
                  } else {
                      //console.log(i,sec[i].firstChild.innerText);
                      sec[i].remove();
                      //return true;
                  }
              }
              //return false;
          }
          api.onAppEvent("page:changed", (data) => {
              if(data.currentRouteName == 'privacy') {
                  reloadOTBanner();
                  clearDup();
              }
          })
      </script>
    

Notas

  • Si observa la consola del navegador, podría encontrar que la función OptanonWrapper falta en el archivo donde agregó su consentimiento de cookies o cualquier código relacionado, pero ese no es el caso. Discourse no elimina el bloque de código con la función OptanonWrapper; más bien, convierte ese bloque en su propio archivo. Puede intentar llamar a esa función en la consola JS de su navegador para confirmar que la función realmente existe.
17 Me gusta

Para usuarios de Cloudflare

https://community.cloudflare.com/t/how-to-create-custom-consent-modal-and-customise-it-using-zaraz-consent-api/699318