Todo marcado antes de preguntar
Entra en la página del Ministerio, dentro de la web de Transportes, abre el panel de cookies desde el aviso y los interruptores ya están encendidos antes de que toques nada. Lo comprobamos el 23 de septiembre. Encima de las líneas de código que lo hacen hay un comentario, en castellano, que lo explica paso a paso, así que no hace falta deducirlo.
- Dominio
- www.transportes.gob.es
- Guardado
- 31 AGO 2026
- Comprobado en vivo
- 15 SEP 2026
- Citas
- 4 en 1 fichero guardado
- Lectura
- unos 4 min

El 23 de septiembre abrimos la página del Ministerio, una de las que llevan Klaro. Abajo aparece el aviso: el sitio usa cookies propias y de terceros para conocer los hábitos de navegación y hacer estadísticas, y ofrece dos salidas, un botón para estar de acuerdo y un enlace para ajustar la configuración. Pulsamos el enlace, que abre el panel donde se elige, y nada más. El museo suele esconder estos avisos en sus fotos; aquí se dejan, porque son el caso.

El panel se titula «Servicios que nos gustaría utilizar» y dice: «¡Usted decide! Habilite o deshabilite los servicios como considere oportuno». Debajo hay dos interruptores, Analíticas y Cookies propias, y un botón para aceptar la selección. Los dos estaban encendidos al abrirlo. El de las cookies propias lleva al lado que es siempre requerido; el de las analíticas, no. Lo que se ve encaja con un bloque de código de la propia web, escrito para hacer justo eso.

El paquete junta en un solo fichero muchos programas de la web, y uno de ellos es Klaro. Klaro llega compilado: hecho por una máquina a partir de otros ficheros, casi 8.000 líneas sin un comentario, porque no está pensado para que nadie lo lea. En medio, en las líneas 5.319 a 5.360, hay nueve comentarios en castellano, con mayúsculas y tildes, y son los únicos dentro de Klaro. Tres explican lo que la máquina puso ahí; los otros seis acompañan al bloque de esta pieza. Alguien abrió el programa ya compilado y escribió dentro.
Uno de esos comentarios anuncia lo que viene: «Si los datos no están confirmados, realizar cambios en los campos especificados». Debajo, la condición: si el gestor no está confirmado. Confirmado quiere decir que el visitante ya ha pulsado el botón del panel, aceptar, rechazar o guardar su elección; mientras no lo pulse, y solo mientras no lo pulse, este bloque se ejecuta. En la jerga de estos programas, un servicio es cada cosa que puede cargarse o no según lo que usted diga: el medidor de visitas, el mapa incrustado, el vídeo de una plataforma. Un consentimiento es la respuesta guardada para cada uno de ellos.
- Copia
- archivo
- Guardado
- 31 ago 2026
- Peso
- 834,9 kB
- sha256
- e5e5c8eacdfe…
| 5319 | // Verificar si la clase se llama correctamente como una función constructora |
| 5320 | (function (e, t) { |
| 5321 | if (!(e instanceof t)) { |
| 5322 | throw new TypeError("Cannot call a class as a function") |
| 5323 | } |
| 5324 | })(this, i); |
| 5325 | |
| 5326 | // Llamada al constructor del padre (si aplica) |
| 5327 | t = r.call(this, e); |
| 5328 | |
| 5329 | // Si los datos no están confirmados, realizar cambios en los campos especificados |
| 5330 | if (!t. |
| 5331 | // Establecer allEnabled y allDisabled |
| 5332 | t.props.allEnabled = true; |
| 5333 | t.props.allDisabled = false; |
| 5334 | |
| 5335 | // Cambiar todos los elementos de config.services a default = true |
| 5336 | t. |
| 5337 | service.default = true; |
| 5338 | }); |
| 5339 | |
| 5340 | // Establecer todos los consents a true |
| 5341 | Object. |
Y lo que hace son cuatro cosas, cada una con su comentario delante. Pone en verdadero la propiedad que significa todo activado y en falso la que significa todo desactivado. Recorre la lista de servicios y marca cada uno como activado por defecto. Recorre la lista de consentimientos y los pone todos en verdadero. Y luego repite las dos últimas operaciones sobre el gestor, no ya sobre la pantalla.
- Copia
- archivo
- Guardado
- 31 ago 2026
- Peso
- 834,9 kB
- sha256
- e5e5c8eacdfe…
| 5331 | // Establecer allEnabled y allDisabled |
| 5332 | t.props.allEnabled = true; |
| 5333 | t.props.allDisabled = false; |
| 5334 | |
| 5335 | // Cambiar todos los elementos de config.services a default = true |
| 5336 | t. |
| 5337 | service.default = true; |
| 5338 | }); |
| 5339 | |
| 5340 | // Establecer todos los consents a true |
| 5341 | Object. |
| 5342 | t.props.consents[key] = true; |
| 5343 | }); |
| 5344 | |
| 5345 | // Repetir el proceso para manager.config y manager.consents |
| 5346 | t. |
| 5347 | service.default = true; |
| 5348 | }); |
| 5349 | |
| 5350 | Object. |
| 5351 | t. |
| 5352 | }); |
Esa distinción importa y por eso la escribimos despacio. Las dos primeras vueltas tocan lo que se ve: el estado del componente que pinta el panel, es decir, los interruptores. Las dos siguientes tocan la configuración y los consentimientos del gestor, que es la pieza que decide qué se carga. En el código, las cuatro pasan por el mismo sitio y con la misma frase: igual a verdadero.
- Copia
- archivo
- Guardado
- 31 ago 2026
- Peso
- 834,9 kB
- sha256
- e5e5c8eacdfe…
| 5335 | // Cambiar todos los elementos de config.services a default = true |
| 5336 | t. |
| 5337 | service.default = true; |
| 5338 | }); |
| 5339 | |
| 5340 | // Establecer todos los consents a true |
| 5341 | Object. |
| 5342 | t.props.consents[key] = true; |
| 5343 | }); |
| 5344 | |
| 5345 | // Repetir el proceso para manager.config y manager.consents |
| 5346 | t. |
| 5347 | service.default = true; |
| 5348 | }); |
| 5349 | |
| 5350 | Object. |
| 5351 | t. |
| 5352 | }); |
| 5353 | |
| 5354 | // // Cambiar todos los elementos de manager.services a default = true |
| 5355 | // t. |
| 5356 | // service.default = true; |
El bloque termina con un resto de taller: cuatro líneas apagadas que harían lo mismo con una tercera lista. Dos barras delante convierten una línea de programa en un comentario, que el navegador no ejecuta. Las tres líneas de programa llevan dos barras; la que las explicaba, que ya era un comentario, lleva cuatro. Se quedaron ahí, a la vista y sin hacer nada.
- Copia
- archivo
- Guardado
- 31 ago 2026
- Peso
- 834,9 kB
- sha256
- e5e5c8eacdfe…
| 5343 | }); |
| 5344 | |
| 5345 | // Repetir el proceso para manager.config y manager.consents |
| 5346 | t. |
| 5347 | service.default = true; |
| 5348 | }); |
| 5349 | |
| 5350 | Object. |
| 5351 | t. |
| 5352 | }); |
| 5353 | |
| 5354 | // // Cambiar todos los elementos de manager.services a default = true |
| 5355 | // t. |
| 5356 | // service.default = true; |
| 5357 | // }); |
| 5358 | } |
| 5359 | |
| 5360 | // Establecer el estado inicial del componente |
| 5361 | t.state = { servicesVisible: false }; |
| 5362 | |
| 5363 | return t; |
| 5364 | } |
Este mismo bloque está en 28 ficheros del archivo: son los paquetes que la web arma para distintas combinaciones de páginas, y todos lo llevan. El que citamos, con sus 834.864 bytes, lo guardamos el 31 de agosto, y el 23 de septiembre seguía en su dirección, idéntico byte a byte. La página del Ministerio carga ese día otro paquete, de 845.109 bytes, con el mismo bloque dentro. De las 800 páginas de la web que guardamos el 22 de septiembre, 610 cargan un paquete que lo lleva.
Lo que no podemos decir desde fuera es qué ocurre después: si esas marcas viajan a alguna parte o si el gestor llega a cargar algo con ellas antes de que el visitante pulse. Para saberlo habría que seguir por dentro lo que hace el navegador, y este museo lee ficheros y mira pantallas. Lo que está escrito, en castellano y por quien lo hizo, es que mientras el visitante no confirme, todo vale por aceptado. Y lo que se ve al abrir el panel es eso mismo.
El panel dice «¡Usted decide!» con los interruptores ya encendidos. Encima del código que los enciende, un comentario en castellano lo explica paso a paso.
- El paquete de programas que www.transportes.gob.es sirve con su gestor de consentimiento, Klaro, contiene un bloque, comentado en castellano, que se ejecuta cuando manager.confirmed es falso (mientras el visitante no ha pulsado el botón del panel).
- Pone
allEnableda true,allDisableda false, el campo default de cada servicio a true y cada consentimiento a true, tanto en las propiedades del componente como en las del gestor. - Dentro del código compilado de Klaro (líneas 15 a 7.939 del fichero citado) no hay más comentarios en castellano que los nueve de las líneas 5.319 a 5.360.
- El mismo bloque está en 28 ficheros del archivo.
- El fichero citado tiene 834.864 bytes y el 23 de septiembre de 2026 se sirve idéntico al del 31 de agosto; ese día la página /ministerio carga otro paquete, de 845.109 bytes, con el mismo bloque, y de las 800 páginas de la web guardadas el 22 de septiembre, 610 cargan un paquete que lo contiene.
- El 23 de septiembre, en /ministerio, pulsando solo el enlace que abre el panel, los interruptores Analíticas y Cookies propias aparecen encendidos.
- La portada usa otro gestor.
- No decimos que se carguen cookies ni servicios sin permiso: eso ocurriría o no después, y para verlo habría que seguir lo que hace el navegador, cosa que no hemos hecho.
- No decimos que los interruptores encendidos se deban solo a este bloque: lo que se ve encaja con lo que el bloque hace, pero no hemos separado su efecto del resto de la configuración.
- No decimos que el ministerio incumpla ninguna norma: este museo describe código y no dictamina derecho.
- No decimos que esto lo haga Klaro: el bloque está escrito dentro del código compilado y comentado en castellano, pero no hemos comparado el fichero con el programa original, así que no afirmamos de dónde sale cada línea.
- En el panel pulsamos solo el enlace que lo abre; nada dentro de él.
De dónde sale cada cita
Cada trozo de código de esta ficha está en un fichero guardado tal como lo entregó el servidor, con su huella (sha256) y su hora. Las citas entre «» se comprueban por programa contra ese fichero antes de publicar.
- https://www.transportes.gob.es/recursos_mfom/js/js_5eXI6s3-svN8rq3PHpqIIw385DRTIXkJlodiPladSHA.js31 de agosto de 2026, 18:59archivosha256 e5e5c8eacdfeb2f37caeadcf1e9a88230dfce434532179099687623e569d4870
- https://www.transportes.gob.es/recursos_mfom/js/js_5eXI6s3-svN8rq3PHpqIIw385DRTIXkJlodiPladSHA.js15 de septiembre de 2026, 10:02en vivo · byte a byte igualsha256 e5e5c8eacdfeb2f37caeadcf1e9a88230dfce434532179099687623e569d4870