2010-11-06 14 views
43

Estoy utilizando una conexión a Internet basada en una red móvil y el código fuente se reescribe cuando presentan el sitio al usuario final.Detener el proxy de red móvil al inyectar JavaScript

En el servidor local, mi sitio web se ve bien, pero cuando navego por el sitio desde el servidor remoto a través de la conexión de red móvil, el sitio se ve mal.

Comprobando el código fuente Encontré que una parte del código JavaScript se está inyectando en mis páginas, lo que desactiva algunos CSS que hacen que el sitio se vea mal.

No quiero compresión de imagen o compresión de ancho de banda en lugar de mi CSS bien diseñado.

¿Cómo puedo evitar o detener el proveedor de red móvil (Vodafone en este caso) del proxy que inyecta su JavaScript en mi código fuente?

+0

¿Se trata de un alojamiento gratuito o este es tu propio alojamiento pago? – infinity

+0

Esta es una conexión paga y el alojamiento no es gratis –

+0

+1 El mismo problema conmigo. Usando Vodafone 3g en India. – shashwat

Respuesta

33

No eres el primero. Desafortunadamente, muchos ISP inalámbricos han estado utilizando este enfoque grosero y desagradable a la compresión. Viene de Bytemobile.

Lo que hace es tener un proxy recomprime todas las imágenes que traes más pequeñas por defecto (empeorando significativamente la calidad de la imagen). A continuación, inyecta crudamente una secuencia de comandos en su documento que agrega una opción para cargar la imagen adecuada para cada imagen recomprimida. Desafortunadamente, dado que el guión es un JS de estilo 1990 horriblemente escrito, se juega en todo tu espacio de nombres, secuestra a tus controladores de eventos y tiene una gran probabilidad de estropear tus propios guiones.

No conozco una forma de detener la inyección, salvo el uso de HTTPS. Pero lo que podrías hacer es detectar o sabotear el guión. Por ejemplo, si añade un guión casi al final del documento (entre la inclusión 1.2.3.4 guión y el activador de guión en línea) para neutralizar el gancho proceso de carga se utiliza:

<script type="text/javascript"> 
    bmi_SafeAddOnload= function() {}; 
</script> 

continuación, la secuencia de comandos no se presentaría , por lo que tus eventos y DOM quedarían solos. Por otro lado, la secuencia de comandos inicial aún habría ensuciado tu espacio de nombres con basura, y cualquier problema de marcado que provoque seguirá allí. Además, el usuario se quedará estancado con las imágenes recomprimidas, sin poder obtener los originales.

Usted podría intentar simplemente dejar que el usuario sepa:

<script type="text/javascript"> 
    if ('bmi_SafeAddOnload' in window) { 
     var el= document.createElement('div'); 
     el.style.border= 'dashed red 2px'; 
     el.appendChild(document.createTextNode(
      'Warning. Your wireless ISP is using an image recompression system '+ 
      'that will make pictures look worse and which may stop this site '+ 
      'from working. There may be a way for you to disable this feature. '+ 
      'Please see your internet provider account settings, or try '+ 
      'using the HTTPS version of this site.' 
     )); 
     document.body.insertBefore(el, document.body.firstChild); 
    } 
</script> 
+0

Me pregunto, ¿usaría un puerto además de 80 para detenerlo? – derobert

+2

Probablemente sí, pero solo si dicho acceso está permitido fuera de la red. Otra solución, supongo, sería devolver un tipo de medio que no sea 'text/html'. Para los navegadores compatibles con 'application/xhtml + xml' eso sería una posibilidad, si puede producir marcado que cumpla con los requisitos más rígidos. – bobince

41

Puede utilizar esto en sus páginas. Todavía comprime y poner todo en línea, pero no romper los scripts como jQuery porque va a escapar de todo basado en estándares del W3C

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

En el servidor se puede establecer el control de cahce

"Cache-Control: no-transform" 

Esto detendrá ¡TODAS las modificaciones y presente su sitio tal como es!

documentos de referencia aquí

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5

http://stuartroebuck.blogspot.com/2010/08/official-way-to-bypassing-data.html

Web site exhibits JavaScript error on iPad/iPhone under 3G but not under WiFi

+1

Esto realmente me ayudó mucho. Para el registro, Vodafone Romania también emplea esta estrategia para "optimizar" su tráfico web móvil. – AlexB

+0

Caveat emptor: solo detendrá todas las modificaciones si los proxies intermedios respetan el encabezado de Cache-Control. Ellos bien podrían haber elegido ignorarlo. – Confusion

+2

@Confusion Es cierto, pero como resulta que la mayoría de los proveedores de Internet móvil utilizan la misma plataforma para "optimizar" el tráfico web y esta plataforma sí es compatible con la directiva de no-transformación. – AlexB

9

proveedor le podrían haber permitido una característica Bytemobile Unison llamada "personalización sin cliente". Intente acceder a la URL fija http://1.2.3.50/ups/ - si está configurada, terminará en una página que le ofrecerá desactivar todas las características que no le gustan. Incluyendo inyección de Javascript.

¡Buena suerte! Alex.

+0

nos preguntamos cómo puede el ISP salirse con la suya al no contarnos sobre esto, gracias por la información de http://1.2.3.50/ups/, funciona. – valexa

+0

@valexa Posiblemente su ISP no lo sepa y se quede en la configuración predeterminada. –

+0

+1 para el enlace de la consola de administración;) - Con la configuración predeterminada de ISP, fontello.com es inútil (no funciona en absoluto), ahora, ¡todo está desactivado y funciona! – qdev

1

BMI js no es solo en Vodafone. Verginmedia UK y T-Mobile UK también le brindan esta función adicional habilitada como predeterminada y de forma gratuita. ;-) En T-Mobile se llama "La banda ancha móvil acelerador" se puede visitar: http://accelerator.t-mobile.co.uk o http://1.2.3.50/ para configurarlo.

En caso de que lo anterior no se aplica a usted o por alguna razón no es una opción se podía configuración potencialmente su proxy local (polipo w/wo Tor) También hay un complemento de Firefox llamado "BlockSite" o como un enfoque más drástico restablecer la conexión tcp a 1.2.3.0/24:80 en su firewall. Pero desafortunadamente eso no arreglaría el daño.

Bastante curioso, el soporte para móvil/banda ancha de T-mobile y Verginmedia no conoce esta función. (2011.10.11)

0

Si lo está obteniendo en un sitio que usted posee o está desarrollando, entonces simplemente puede anular la función poniéndola en nulo. Esto es lo que funcionó para mí muy bien.

bmi_SafeAddOnload = null; 

En cuanto a conseguir que en otros sitios que visita, entonces es probable que se podía abrir la consola devtools y simplemente entrar en eso en allí y hacerla desaparecer si una página está tomando mucho tiempo para cargar. Sin embargo, aún no lo hemos probado.

7

Si usted está escribiendo propios sitios web, añadiendo una cabecera que funcionó para mí:

PHP: 
    Header("Cache-Control: no-transform"); 
C#: 
    Response.Cache.SetNoTransforms(); 
VB.Net: 
    Response.Cache.SetNoTransforms() 

Asegúrese de usarlo antes de los datos se ha enviado al navegador.

-1

una solución eficaz que he encontrado es que editar el archivo hosts (/etc/hosts en Sistemas de tipo Unix/Linux, C:\Windows\System32\drivers\etc en Windows) para tener:

null 1.2.3.4 

Que efectivamente asigna todas las solicitudes al 1.2.3.4 al . Probado con mi banda ancha móvil Crazy Johns (propiedad de Vofafone). Si su proveedor usa una dirección IP diferente para la secuencia de comandos inyectada, simplemente cámbiela a esa IP.

1

PHP: Encabezado ("Cache-Control: no-transform"); ¡Gracias! Me alegro de haber encontrado esta página.

Esa secuencia de comandos del inyector estaba estropeando el código fuente de mi página php, lo que me hizo pensar que cometí un error en mi codificación php al visualizar el origen de la página. Aunque la secuencia de comandos se bloqueó con Firefox NoScript add on. Todavía estaba estropeando mi código. Bueno, después de ese dilema irritante, quería deshacerme de él por completo y no solo bloquearlo con Adblock o los agregados de noscript firefox o simplemente en mi página php.

  1. PARADA http: // 1.2.3.4 completamente en Firefox: Obtener el add on: Modificar encabezados.
  2. Vaya a las opciones de agregar el encabezado modificado ... ahora en la pestaña Encabezado.
  3. Seleccionar acción: Seleccione AGREGAR.
  4. para la cabecera Tipo Nombre en: Cache-Control
  5. para la cabecera Tipo de valor en: no transformada
  6. Para el tipo de comentario en: Bloque 1.2.3.4
  7. haga clic en Agregar ... A continuación, haga clic en Inicio.

¡La secuencia de comandos 1.2.3.4 no se inyectará en ninguna página más! ¡sí!

Ya no veo 1.2.3.4 bloqueado por NoScript. porque no está allí. sí.

Pero aún agregaré: PHP: Header ("Cache-Control: no-transform"); a mis páginas php.

-1

Encabezado ("Cache-Control: no-transform");

utilice el código php anterior en su cada archivo php y se librará de la inyección de código 1.2.3.4.

Eso es todo.

Yo también estaba sufriendo el mismo problema, ahora está corregido. Intentalo.

0

he añadido a /etc/hosts

1.2.3.4 localhost 

parece haber arreglado.

0

bien, nada de trabajo para mí. Luego reemplazo la URL de imagen cada segundo porque cuando mi DOM se actualiza, el problema vuelve a aparecer. Otra solución es solo usar estilo de fondo incluir automáticamente en páginas. Nada está limpio.

setInterval(function(){ imageUpdate(); }, 1000); 

function imageUpdate() { 
    console.log('######imageUpdate'); 
    var image = document.querySelectorAll("img"); 
    for (var num = 0; num < image.length; num++) { 
     if (stringBeginWith(image[num].src, "http://1.1.1.1/bmi/***yourfoldershere***")) { 
      var str=image[num].src; 
      var res=str.replace("http://1.1.1.1/bmi/***yourfoldershere***", ""); 
      image[num].src = res; 
      console.log("replace"+str+" by "+res); 
      /* 
      other solution is to push img src in data-src and push after dom loading all your data-src in your img src 
      var data-str=image[num].data-src; 
      image[num].src = data-str; 
      */ 
      } 
     } 
} 

function stringEndsWith(string, suffix) { 
    return string.indexOf(suffix, string.length - suffix.length) !== -1 
} 
function stringBeginWith(string, prefix) { 
    return string.indexOf(prefix, prefix.length-string.length) !== -1 
} 
8

Estoy sorprendido de que nadie haya puesto esto como respuesta todavía. La solución real es: HTTPS

USO!

Esta es la única forma de evitar que los ISP (u otra persona) inspeccione todo su tráfico, husmee en sus visitantes y modifique su sitio web durante el vuelo.

Con la llegada de Let's Encrypt, obtener un certificado ahora es gratis y fácil. Realmente no hay razón para no usar HTTPS en este día y edad.

También debe usar una combinación de redirecciones y HSTS para mantener a todos sus usuarios en HTTPS.

Cuestiones relacionadas