阻止移动网络代理注入JavaScript

Mas*_*man 44 javascript proxy

我正在使用基于移动网络的互联网连接,当他们将网站呈现给最终用户时,正在重写源代码.

在localhost我的网站看起来很好,但是当我通过移动网络连接从远程服务器浏览网站时,该网站看起来很糟糕.

检查源代码我发现一段JavaScript代码正在注入我的页面,这会禁用一些使网站看起来很糟糕的CSS.

我不想要图像压缩或带宽压缩,而不是我精心设计的CSS.

如何阻止或阻止移动网络提供商(在这种情况下为Vodafone)代理将JavaScript注入我的源代码?

Pio*_*ula 42

您可以在页面上使用它.它仍然压缩并将所有内容放入内联但它不会破坏像jquery这样的脚本,因为它会根据W3C标准逃避一切

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Run Code Online (Sandbox Code Playgroud)

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

"Cache-Control: no-transform"
Run Code Online (Sandbox Code Playgroud)

这将停止所有修改并显示您的网站!

参考文档在这里

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下的iPad/iPhone上展示JavaScript错误,但不在WiFi下

  • @Confusion True,但事实证明大多数移动互联网提供商使用相同的平台来"优化"网络流量,而这个平台确实支持no-transform指令. (2认同)

bob*_*nce 34

你肯定不是第一个.不幸的是,许多无线ISP一直在使用这种粗暴和不受欢迎的压缩方法.它来自Bytemobile.

它的作用是让代理重新压缩你默认获取的所有图像(使图像质量明显变差).然后它粗略地在您的文档中注入一个脚本,该脚本添加了一个选项,用于为每个重新压缩的图像加载正确的图像.不幸的是,由于该脚本是一个可怕的20世纪90年代风格的JS,它在您的命名空间中肆意破坏,劫持您的事件处理程序并且很有可能弄乱您自己的脚本.

我不知道如何停止注射本身,缺乏使用HTTPS.但你可以做的是检测或破坏脚本.例如,如果您在文档末尾附近(在1.2.3.4脚本包含和内联脚本触发器之间)添加一个脚本到中性使用的onload挂钩:

<script type="text/javascript">
    bmi_SafeAddOnload= function() {};
</script>
Run Code Online (Sandbox Code Playgroud)

然后脚本将无法运行,因此您的事件和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>
Run Code Online (Sandbox Code Playgroud)

  • 可能是的,但只有在允许这种访问完全离开网络的情况下.我想,另一种解决方法是返回除`text/html`以外的媒体类型.对于支持`application/xhtml + xml`的浏览器,如果可以生成满足更严格要求的标记. (2认同)

Cam*_*son 11

我很惊讶没有人把它作为答案.真正的解决方案是:

使用HTTPS!

这是阻止ISP(或其他任何人)检查您的所有流量,窥探访问者以及修改您的网站的唯一方法.

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

您还应该使用重定向和HSTS的组合来保持所有用户使用HTTPS.

  • 我们都应该使用 HTTPS,这是最相关的答案 - 无需使用“无转换”。谢谢。 (2认同)

Ale*_*sen 8

您的提供商可能已启用Bytemobile Unison功能,称为"无客户端个性化".尝试访问固定的URL http://1.2.3.50/ups/ - 如果已配置,您将最终进入一个页面,该页面将禁用您不喜欢的所有功能.包括Javascript注入.

祝好运!亚历克斯.


小智 7

如果您正在编写自己的网站,请添加标题为我工作:

PHP:
    Header("Cache-Control: no-transform");
C#:
    Response.Cache.SetNoTransforms();
VB.Net:
    Response.Cache.SetNoTransforms()
Run Code Online (Sandbox Code Playgroud)

在将任何数据发送到浏览器之前,请务必使用它.