2010-11-06 12 views
43

Sto utilizzando una connessione Internet basata su rete mobile e il codice sorgente viene riscritto quando presentano il sito all'utente finale.Arresta il proxy di rete mobile dall'iniezione di JavaScript

Nel localhost il mio sito web sembra a posto, ma quando navigo il sito dal server remoto tramite la connessione di rete mobile il sito sembra in cattivo stato.

Controllo del codice sorgente Ho trovato un pezzo di codice JavaScript che è stato iniettato sulle mie pagine che sta disabilitando alcuni CSS che rendono il sito un aspetto negativo.

Non voglio la compressione delle immagini o la compressione della larghezza di banda invece del mio CSS ben progettato.

Come si può impedire o interrompere il provider di rete mobile (Vodafone in questo caso) dal proxy che inserisce il proprio codice JavaScript nel mio codice sorgente?

+0

Si tratta di un hosting gratuito o questo è il tuo hosting a pagamento? – infinity

+0

Questa è una connessione a pagamento e l'hosting non è gratuito –

+0

+1 Lo stesso problema con me. Utilizzo di Vodafone 3g in India. – shashwat

risposta

33

Non sei certo il primo. Sfortunatamente molti ISP wireless hanno usato questo approccio grossolano e sgradito alla compressione. Viene da Bytemobile.

Quello che fa è avere un proxy ricomprimere tutte le immagini che si scaricano di dimensioni inferiori per impostazione predefinita (peggiorando notevolmente la qualità dell'immagine). Quindi inserisce crudamente uno script nel documento che aggiunge un'opzione per caricare l'immagine corretta per ogni immagine ricompressa. Sfortunatamente, dal momento che la sceneggiatura è un JS in stile anni '90 orribilmente scritto, esso fruga in tutto il tuo spazio dei nomi, dirotta i gestori degli eventi e ha un'alta probabilità di incasinare i tuoi script.

Non so come fermare l'iniezione stessa, a meno di utilizzare HTTPS. Ma quello che potresti fare è rilevare o sabotare lo script. Ad esempio, se si aggiunge uno script vicino alla fine del documento (tra il 1.2.3.4 sceneggiatura inclusione e il trigger di script in linea) per sterilizzare il gancio onload usa:

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

allora lo script non avrebbe eseguito , quindi i tuoi eventi e DOM verrebbero lasciati in pace. D'altra parte, lo script iniziale avrebbe comunque disseminato il tuo spazio dei nomi con la posta indesiderata e qualsiasi problema di markup che causerà sarà ancora presente. Inoltre, l'utente sarà bloccato con le immagini ricompresse, incapace di ottenere gli originali.

Si potrebbe provare solo lasciando all'utente di sapere:

<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

Mi chiedo, utilizzerei un porto oltre 80 per fermarlo? – derobert

+2

Probabilmente sì, ma solo se tale accesso è consentito fuori dalla rete. Un'altra soluzione, suppongo, sarebbe quella di restituire un tipo di supporto diverso da 'text/html'. Per i browser che supportano 'application/xhtml + xml' questa sarebbe una possibilità, se è possibile produrre un markup che soddisfi i requisiti più rigidi. – bobince

41

È possibile utilizzare questo nelle tue pagine. Si comprime ancora e mettere tutto in linea ma non lo rompere gli script come jQuery perché sarà sfuggire tutto sulla base di standard stabiliti dal W3C

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

Sul server è possibile impostare il controllo di cache all'interno

"Cache-Control: no-transform" 

Questo fermerà TUTTE le modifiche e presenta il tuo sito così com'è!

documenti di riferimento qui

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

Questo in realtà mi ha aiutato molto. Per la cronaca, Vodafone Romania impiega anche questa strategia per "ottimizzare" il proprio traffico web mobile. – AlexB

+0

Caveat emptor: fermerà tutte le modifiche se i proxy intermedi rispettano l'intestazione Cache-Control. Possono anche aver scelto di ignorarlo. – Confusion

+2

@Confusion Vero, ma come risulta la maggior parte dei provider di Internet mobile utilizzano la stessa piattaforma per "ottimizzare" il traffico web e questa piattaforma supporta la direttiva no-transform. – AlexB

9

fornitore Potreste aver attivato una funzione Bytemobile Unison chiamata "clientless personalizzazione". Prova ad accedere all'URL fisso http://1.2.3.50/ups/ - se è configurato, finirai su una pagina che ti offrirà di disabilitare tutte le funzionalità che non ti piacciono. Compreso l'iniezione di Javascript.

Buona fortuna! Alex.

+0

si chiede di sapere come l'ISP può farcela a non dircelo, grazie per le informazioni http://1.2.3.50/ups/, funziona. – valexa

+0

@valexa Forse il tuo ISP non lo sa e viene lasciato nella configurazione predefinita. –

+0

+1 per il collegamento della console di amministrazione;) - Con impostazioni ISP predefinite, fontello.com è inutile (non funziona affatto), ora tutto è disabilitato e funziona! – qdev

1

BMI js non è solo su Vodafone. Verginmedia UK e T-Mobile UK ti offrono inoltre questa funzione extra abilitata come predefinita e gratuitamente. ;-) In T-mobile si chiama "Mobile Broadband Accelerator" si possono visitare: http://accelerator.t-mobile.co.uk o http://1.2.3.50/ per configurarlo.

Nel caso di cui sopra non si applica a voi o per qualche motivo non è un'opzione si potrebbe impostare il vostro proxy locale (Polipo w/wo Tor) C'è anche un addon per Firefox chiamato "BlockSite" o come approccio più drastico resettare la connessione tcp alla 1.2.3.0/24:80 sul firewall. Ma sfortunatamente ciò non risolverà il danno.

Abbastanza divertente T-mobile e Verginmedia mobile/supporto a banda larga non è a conoscenza di questa funzionalità! (2011.10.11)

0

Se lo si sta acquistando su un sito di proprietà o in fase di sviluppo, è possibile semplicemente sovrascrivere la funzione impostandola su null. Questo è quello che ha funzionato bene per me.

bmi_SafeAddOnload = null; 

Per quanto riguarda ottenerlo su altri siti che visiti, allora probabilmente si potrebbe aprire la console DevTools e basta inserire che in là e pulire se una pagina richiede molto tempo per caricare. Non ho ancora provato questo però.

7

Se si scrive propri siti web, aggiungendo un colpo di testa ha funzionato per me:

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

Assicurarsi di usarlo prima che i dati è stato inviato al browser.

-1

Una soluzione efficace che ho trovato è stato quello di modificare il file hosts (/etc/hosts su Sistemi di tipo Unix/Linux, C:\Windows\System32\drivers\etc su Windows) per:

null 1.2.3.4 

Quale mappa efficace tutte le richieste a 1.2.3.4 a null. Testato con il mio Crazy Johns (di proprietà di Vofafone) a banda larga mobile. Se il tuo provider usa un indirizzo IP diverso per lo script inserito, cambialo su quell'IP.

1

PHP: Intestazione ("Cache-Control: no-transform"); Grazie! Sono contento di aver trovato questa pagina.

Lo script di Injector stava rovinando il codice sorgente della mia pagina php, facendomi pensare di aver commesso un errore nella codifica del php durante la visualizzazione del sorgente della pagina. Anche se lo script è stato bloccato con la funzione NoScript di firefox. Stava ancora rovinando il mio codice. Bene, dopo quel fastidioso dilemma, volevo liberarmene completamente e non limitarmi a bloccarlo con add-on di adblock o noscript firefox o semplicemente sulla mia pagina php.

  1. ARRESTO http: // 1.2.3.4 Completamente in Firefox: ottenere l'add on: Modify intestazioni.
  2. Vai all'intestazione modifica aggiungi opzioni ... ora nella scheda Intestazione.
  3. Seleziona azione: scegli AGGIUNGI.
  4. per l'intestazione Tipo Nome: Cache-Control
  5. per l'intestazione Tipo di valore in: no-transform
  6. Per il tipo Commento in: Blocco 1.2.3.4
  7. fare clic su Aggiungi ... Quindi fare clic su Start.

Lo script 1.2.3.4 non verrà inserito in altre pagine! si!

Non vedo più 1.2.3.4 bloccato da NoScript. perché non è lì. si.

Ma aggiungerò ancora: PHP: Header ("Cache-Control: no-transform"); alle mie pagine di php.

-1

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

utilizza il codice php sopra riportato in ogni file php e ti libererai dell'iniezione del codice 1.2.3.4.

Questo è tutto.

Anch'io soffrivo dello stesso problema, ora è stato corretto. Prova.

0

ho aggiunto al /etc/hosts

1.2.3.4 localhost 

sembra aver riparato.

0

Ok, niente funziona per me. Quindi sostituisco l'URL delle immagini ogni secondo perché quando il mio DOM si aggiorna, il problema è di nuovo qui. Un'altra soluzione è usare solo lo stile auto in background incluso nelle pagine. Niente è pulito.

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

sto sorpreso che nessuno ha messo questo come risposta ancora. La vera soluzione è:

USO HTTPS!

Questo è l'unico modo per impedire agli ISP (oa chiunque altro) di ispezionare tutto il traffico, spiare i visitatori e modificare il sito Web in volo.

Con l'avvento di Let's Encrypt, ottenere un certificato è ora gratuito e facile. Non c'è davvero alcun motivo per non utilizzare HTTPS in questo giorno ed età.

È inoltre necessario utilizzare una combinazione di reindirizzamenti e HSTS per mantenere tutti gli utenti su HTTPS.

Problemi correlati