Un script bmi.js en tu navegación móvil

Si navegas desde tu teléfono o bien utilizas tu conexión móvil para hacer tethering y conectarte cont tus otros dispositivos, puede ocurrir que en el código fuente de tus páginas HTML aparezca un supuesto ataque mediante inyección de código, que no corresponden a la fuente original de la página.

Ayer, trabajando sobre en mis páginas web me encontré unos errores javascript que no tenían nada que ver con mi código, investigando un poco más me encontre la inclusión de este script bmi.js en la sección <head> del HTML: <script src="http://1.2.3.4/bmi-int-js/bmi.js" ..., código que por supuesto no he incluido en ningún momento. Las direcciones IP pueden variar a otras como 1.2.3.8, 4.3.2.1, etc. Lógicamente esto sólo ocurre en conexiones HTTP y no en páginas HTTPS con SSL/TLS.

Investigando por google encontré que es una práctica común desde hace varios años de algunas operadoras móviles, Vodafone entre ellas, para reducir el peso de las imágenes y actuar como proxy para ciertos contenidos. Ellos te incrustan este script y su correspondiente llamada de inicialización al final de la página, todo ello sin posibilidad de elegir, además provocando errores como era en mi caso.

El script en cuestión parece que se trata de ByteMobile o de una adaptación del mismo para las operadoras móviles, que podría reducir el tráfico entre un 30-35%.

ByteMobile

Como curiosidad, bmi.js captura los eventos Ctrl+R para recargar la imagen original que tiene el hover actual y Ctrl+A recarga todas las imágenes de la página. Si estás afectado por este script podrás ver la ayuda al situarte con el ratón encima de una imagen.

¿Esto tiene alguna ventaja para mi?

Bueno, se supone que lo que hacer es reducir mi consumo de ancho de banda (y por tanto menos recursos que necesitan los operadores), ya que reducen el tamaño de las imágenes y otros ficheros susceptibles de ser comprimidos.

Como consecuencia de esta reducción de tamaños de los ficheros aumenta la velocidad y "mejora la experiencia" de los sufridos usuarios al navegar con sus dispositivos móviles.

¿Tiene desventajas?

Pues la primera es que ves una reducción de la calidad de las imágenes sin haberlo solicitado, así como que puede fastidiarte la caché local de tu navegador en la solicitud de ficheros que son modificados previamente, por lo que podría obligarte a cargar siempre ficheros como jquery que podrían ya estar previamente cacheados en tu navegador local.

Otra desventaja para los programadores son los errores que te pueden volver loco hasta que descubres que no es cosa tuya, especialmente si utilizas servicios de terceros que en sus respuestas también se incrustan este script de forma recursiva.

¿Cómo puedo evitarlo?

Pues una forma simple, y que parece que este script respeta, es incluir en la cabecera de respuesta: Cache-Control: no-transform bien en tu fichero .htaccess o bien desde tu lenguaje de programación al generar el contenido enviado, etc.

Como programador puedes sobreescribir sus llamadas javascript para que sean null o a funciones nulas, etc.

Otra opción es instalarte algún bloqueador de scripts que evite la carga de scripts no deseados. Incluso puedes bloquear las direcciones IP donde se descarga.