【问题标题】:Stop mobile network proxy from injecting JavaScript阻止移动网络代理注入 JavaScript
【发布时间】:2011-05-06 00:34:35
【问题描述】:

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

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

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

我不想要图像压缩或带宽压缩来代替我精心设计的 CSS。

如何防止或阻止移动网络提供商(在本例中为 Vodafone)代理将其 JavaScript 注入我的源代码?

【问题讨论】:

  • 这是免费托管还是您自己的付费托管?
  • 这是一个付费连接,托管不是免费的
  • +1 我也有同样的问题。在印度使用 Vodafone 3g。

标签: javascript proxy


【解决方案1】:

您可以在您的网页上使用它。它仍然会压缩并将所有内容内联,但不会破坏像 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

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

【讨论】:

  • 这实际上对我帮助很大。根据记录,沃达丰罗马尼亚公司也采用这种策略来“优化”他们的移动网络流量。
  • 警告购买者:只有在中间代理尊重您的 Cache-Control 标头时,它才会停止所有修改。他们也可能选择忽略它。
  • @Confusion 没错,但事实证明,大多数移动互联网提供商都使用相同的平台来“优化”网络流量,并且该平台确实支持 no-transform 指令。
  • Cache-Control: no-transform 使用在 Vodafone Germany 网络上运行的 ISP 为我解决了这个问题。他们做的这件事简直是邪恶的。
  • 非常感谢,我们在 Apex 网站上遇到了同样的问题。客户在 Vodaphone 3G 上使用 Firefox,切换到 ADSL 连接时没有问题。由于我使用的是 Apache,因此我通过在我的配置中添加 Header merge Cache-Control no-transform 来修复它。
【解决方案2】:

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

默认情况下,它的作用是让代理重新压缩您提取的所有图像,使其更小(使图像质量明显变差)。然后它粗略地将一个脚本注入到您的文档中,该脚本添加了一个选项来为每个重新压缩的图像加载正确的图像。不幸的是,由于该脚本是 1990 年代风格的糟糕编写的 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>

【讨论】:

  • 可能是的,但前提是这种访问完全允许从网络之外。我猜另一种解决方法是返回text/html 以外的媒体类型。对于支持application/xhtml+xml 的浏览器,如果您可以生成满足更严格要求的标记,这是可能的。
【解决方案3】:

我很惊讶还没有人把这个作为答案。真正的解决方案是:

使用 HTTPS!

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

随着Let's Encrypt 的出现,获得证书现在变得免费且容易。在这个时代,真的没有理由不使用 HTTPS。

您还应该结合使用重定向和HSTS 来让所有用户都使用 HTTPS。

【讨论】:

  • 我们都应该使用 HTTPS,这是最相关的答案 - 无需使用“无转换”。谢谢。
【解决方案4】:

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

祝你好运! 亚历克斯。

【讨论】:

  • 很想知道 ISP 怎么能不告诉我们这件事,感谢1.2.3.50/ups 的信息,它有效。
  • @valexa 可能您的 ISP 不知道这一点,它保留在默认配置中。
  • +1 用于管理控制台链接 ;) - 使用默认 ISP 设置,fontello.com 是无用的(根本不工作),现在,一切都被禁用并且正在工作!
【解决方案5】:

如果您正在编写自己的网站,添加标题对我有用:

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

确保在将任何数据发送到浏览器之前使用它。

【讨论】:

    【解决方案6】:

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

    <!--<![-->
    

    之后:

    <html>
    

    更多信息(德语):

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

    【讨论】:

      【解决方案7】:

      BMI js 不仅在 Vodafone 上。 Verginmedia UK 和 T-Mobile UK 还为您提供了默认免费启用的这项额外功能。 ;-) 在 T-mobile 中,它被称为“移动宽带加速器” 您可以访问: http://accelerator.t-mobile.co.uk 要么 http://1.2.3.50/ 配置它。

      如果以上不适用于您或出于某种原因,这不是一种选择 您可能会设置您的本地代理(Polipo w/wo Tor) 还有一个名为“blocksite”的 Firefox 插件 或者更激进的方法将 tcp 连接重置为防火墙上的 1.2.3.0/24:80。 但不幸的是,这并不能修复损坏。

      够有趣的 T-mobile 和 Verginmedia 移动/宽带支持不知道这个功能! (2011.10.11)

      【讨论】:

        【解决方案8】:

        PHP: Header("Cache-Control: no-transform");谢谢! 我很高兴我找到了这个页面。

        那个 Injector 脚本弄乱了我的 php 页面源代码,让我觉得在查看页面源代码时我的 php 编码出错了。即使脚本被 firefox NoScript 插件阻止。它仍然弄乱了我的代码。 好吧,在那个恼人的困境之后,我想完全摆脱它,而不仅仅是用 adblock 或 noscript firefox 插件或只是在我的 php 页面上阻止它。

        1. Firefox 中完全停止 http://1.2.3.4:获取插件:修改 标头
        2. 转到修改标题添加选项...现在在标题选项卡上。
        3. 选择操作:选择添加。
        4. 对于标头名称,请输入:cache-control
        5. 对于标头值类型:no-transform
        6. 对于注释输入:块 1.2.3.4
        7. 点击添加...然后点击开始。

        1.2.3.4 脚本将不再注入任何页面!是的!

        我不再看到 NoScript 阻止了 1.2.3.4。因为它不存在。是的。

        但我还是要补充: PHP: Header("Cache-Control: no-transform");到我的 php 页面。

        【讨论】:

          【解决方案9】:

          如果您在您拥有或正在开发的网站上获取它,那么您可以简单地通过将其设置为 null 来覆盖该功能。这对我来说很好。

          bmi_SafeAddOnload = null;
          

          至于在您访问的其他网站上获取它,那么您可能可以打开 devtools 控制台,然后将其输入到那里,如果页面需要很长时间才能加载,则将其清除。不过还没有测试过。

          【讨论】:

            【解决方案10】:

            好吧,对我来说没什么用。然后我每秒替换一次图像 url,因为当我的 DOM 更新时,问题又来了。其他解决方案是仅在页面中使用背景样式自动包含。没有什么是干净的。

            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
            }
            

            【讨论】:

              【解决方案11】:

              我发现一个有效的解决方案是编辑您的主机文件(/etc/hosts 在 Unix/Linux 类型系统上,C:\Windows\System32\drivers\etc 在 Windows 上)具有:

              null 1.2.3.4
              

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

              【讨论】:

                【解决方案12】:

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

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

                就是这样。

                我也遇到了同样的问题,现在已经解决了。试一试。

                【讨论】:

                  【解决方案13】:

                  我添加到/etc/hosts

                  1.2.3.4 localhost
                  

                  好像已经解决了。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2015-04-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多