停止注入JavaScript的移动networking代理

我正在使用基于移动networking的互联网连接,并且在将网站呈现给最终用户时正在重写源代码。

在本地主机我的网站看起来不错,但是当我通过移动networking连接从远程服务器浏览网站时,网站看起来不好。

检查源代码我发现有一段JavaScript代码被注入到我的页面,这是禁用一些使网站看起来不好的CSS。

我不想要图像压缩或带宽压缩,而不是我精心devise的CSS。

如何防止或阻止移动networking提供商(在这种情况下,沃达丰)代理注入他们的JavaScript到我的源代码?

你可以在你的网页上使用它。 它仍然压缩并把所有内联,但它不会像jquery中断脚本,因为它会逃脱一切基于W3C标准

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

在你的服务器上,你可以设置cahce控件

 "Cache-Control: no-transform" 

这将停止所有的修改,并呈现您的网站,因为它!

参考文档在这里

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

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

网站在3G / 3G下的iPad / iPhone上显示JavaScript错误,但不在WiFi下

你当然不是第一个。 不幸的是,许多无线ISP一直在使用这种粗暴和不受欢迎的方式进行压缩。 它来自Bytemobile 。

它所做的就是让代理重新压缩默认缩小的所有图像(使图像质量显着变差)。 然后它粗暴地将一个脚本插入到您的文档中,该脚本添加了一个选项来为每个重新压缩的图像加载适当的图像。 不幸的是,由于这个脚本是一个可怕的20世纪90年代风格的JS,所以它在你的命名空间中占了上风,劫持你的事件处理程序,并且很可能会搞乱你自己的脚本。

我不知道有什么办法可以停止使用HTTPS本身。 但是你可以做的是检测或破坏脚本。 例如,如果在文档结尾附近(在1.2.3.4脚本包含和内联脚本触发器之间)将脚本添加到它使用的onload挂钩的中间位置:

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

那么脚本将不会运行,所以您的事件和DOM将被单独留下。 另一方面,最初的脚本仍然会把你的名字空间扔在垃圾箱里,而它引起的任何标记问题依然存在。 此外,用户将被卡住的重新压缩的图像,无法得到原件。

你可以尝试让用户知道:

 <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> 

您的提供商可能启用了一个名为“无客户端个性化”的Bytemobile Unisonfunction。 尝试访问固定的URL http://1.2.3.50/ups/ – 如果它被configuration,你将最终在一个页面,这将提供你禁用所有你不喜欢的function。 包括Javascript注入。

祝你好运! 亚历克斯。

我很惊讶没有人把这个答案呢。 真正的解决scheme是:

使用HTTPS!

这是阻止ISP(或任何其他人)检查您的所有stream量,窥探您的访问者,并修改您的网站的唯一途径。

随着Let's Encrypt的出现,获得证书现在变得轻松自如了。 在这个时代,真的没有理由不使用HTTPS。

您还应该使用redirect和HSTS的组合来保持所有用户使用HTTPS。

如果你正在写你自己的网站,添加一个头为我工作:

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

在任何数据被发送到浏览器之前,一定要使用它。

我发现了一个窍门。 只需添加:

 <!--<![--> 

后:

 <html> 

更多信息(德文):

http://www.programmierer-forum.de/bmi-speedmanager-und-co-deaktivieren-als-webmaster-t292182.htm#3889392

BMI不仅仅是沃达丰。 Verginmedia UK和T-Mobile UK也为您提供了默认和免费启用的额外function。 ;-)在T-mobile中,它被称为“移动宽带加速器”。您可以访问: http : //accelerator.t-mobile.co.uk或http://1.2.3.50/来configuration它。;

如果上述不适用于您或由于某种原因,这不是一个选项,您可以设置您的本地代理(Polipo w / wo Tor)还有一个名为“blocksite”的Firefox插件或更激进的方法重置tcp连接到你的防火墙上的1.2.3.0/24:80。 但不幸的是,这并不能解决这个问题。

有趣的是,T-mobile和Verginmedia移动/宽带支持并不了解这个function! (2011.10.11)

PHP:Header(“Cache-Control:no-transform”); 谢谢! 我很高兴我find了这个页面。

该注射器脚本搞乱了我的PHP页面源代码,让我觉得我在查看页面源代码时在我的PHP编码中犯了一个错误。 即使脚本被Firefox NoScript添加阻止。 这仍然搞乱我的代码。 那么,在这个刺激性的困境之后,我想完全摆脱它,而不是仅仅用adblock或noscript firefox add ons或者仅仅在我的php页面上阻止它。

  1. 停止http:// 1.2.3.4完全在Firefox中 :获取添加: 修改标题
  2. 转到修改头添加选项…现在在标题选项卡上。
  3. select操作:select添加。
  4. 对于Header Nametypes:cache-control
  5. 对于Header Valuetypes:no-transform
  6. 对于注释types:块1.2.3.4
  7. 点击添加…然后点击开始。

1.2.3.4脚本将不会被注入更多的页面! 是啊!

我不再看到1.2.3.4被NoScript封锁。 因为它不在那里。 是的。

但是我仍然会添加:PHP:Header(“Cache-Control:no-transform”); 到我的PHP页面。

如果你在一个你拥有或正在开发的网站上获得它,那么你可以简单地通过将它设置为null来覆盖该function。 这对我来说工作得很好。

 bmi_SafeAddOnload = null; 

至于在你访问的其他网站上获得它,那么你可能会打开devtools控制台,并进入那里,并擦除它,如果一个页面需要很长的时间来加载。 还没有testing,但。

我添加到/etc/hosts

 1.2.3.4 localhost 

似乎已经修好了。

好吧,没有任何工作给我。 然后我每秒更换图片url,因为当我的DOM更新时,问题再次出现在这里。 其他解决scheme是只使用背景风格自动包含在页面中。 没什么是干净的。

 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 } 

我发现一个有效的解决scheme是编辑你的主机文件(Unix / Linuxtypes系统上的/etc/hostsC:\Windows\System32\drivers\etc ),使其具有:

 null 1.2.3.4 

这有效地将所有请求映射到1.2.3.4null 。 testing我的疯狂约翰(由Vofafone拥有)移动宽带。 如果您的提供者为注入的脚本使用不同的IP地址,只需将其更改为该IP。

标题(“Cache-Control:no-transform”);

在你的每个php文件中使用上面的php代码,你将会摆脱1.2.3.4代码注入。

就这样。

我也遭受同样的问题,现在已经纠正了。 试一下。