Остановите прокси мобильной сети от введения JavaScript - PullRequest
43 голосов
/ 06 ноября 2010

Я использую интернет-соединение на основе мобильной сети, и исходный код переписывается, когда они представляют сайт конечному пользователю.

На локальном хосте мой сайт выглядит нормально, но когда я просматриваю сайт с удаленного сервера через мобильное сетевое соединение, сайт выглядит плохо.

Проверка исходного кода Я обнаружил, что на мои страницы вставляется фрагмент кода JavaScript, который отключает некоторые CSS, из-за которых сайт выглядит плохо.

Я не хочу сжатия изображений или сжатия полосы пропускания вместо моего хорошо разработанного CSS.

Как я могу запретить или запретить провайдеру мобильной сети (в данном случае Vodafone) использовать прокси-сервер для вставки своего JavaScript в мой исходный код?

Ответы [ 13 ]

42 голосов
/ 03 июня 2011

Вы можете использовать это на своих страницах.Он все еще сжимает и помещает все в строку, но он не будет нарушать сценарии, такие как 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"

Это остановит ALL модификаций и представит ваш сайт как есть!

Справочные документы здесь

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

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

На веб-сайте обнаружена ошибка JavaScript на iPad / iPhone под 3G, но не под WiFi

33 голосов
/ 06 ноября 2010

Ты, конечно, не первый. К сожалению, многие беспроводные интернет-провайдеры используют этот грубый и нежелательный подход к сжатию. Это происходит от Bytemobile .

То, что он делает, это заставляет прокси повторно сжимать все изображения, которые вы выбираете, по умолчанию меньшими (что значительно ухудшает качество изображения). Затем он грубо внедряет скрипт в ваш документ, который добавляет опцию для загрузки подходящего изображения для каждого повторно сжатого изображения. К сожалению, поскольку этот скрипт написан ужасно написанным в стиле 1990-х годов JS, он охватывает все ваше пространство имен, захватывает ваши обработчики событий и имеет большой шанс испортить ваши собственные сценарии.

Я не знаю, как остановить саму инъекцию, кроме использования HTTPS. Но то, что вы можете сделать, это обнаружить или саботировать сценарий. Например, если вы добавляете скрипт ближе к концу документа (между включением скрипта 1.2.3.4 и триггером встроенного скрипта), чтобы нейтрализовать используемый им крючок загрузки:

<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>
10 голосов
/ 27 декабря 2015

Я удивлен, что никто еще не назвал это ответом.Реальное решение:

ИСПОЛЬЗУЙТЕ HTTPS!

Это единственный способ помешать интернет-провайдерам (или кому-либо еще) проверять весь ваш трафик, присматривая за вашими посетителями,и изменение вашего сайта в полете.

С появлением Let's Encrypt получение сертификата теперь бесплатно и просто.На самом деле нет причин не использовать HTTPS в наши дни.

Вам также следует использовать комбинацию перенаправлений и HSTS , чтобы держать всех ваших пользователей на HTTPS.

8 голосов
/ 23 сентября 2011

Возможно, ваш провайдер включил функцию Bytemobile Unison, которая называется «персонализация без клиента». Попробуйте получить доступ к фиксированному URL http://1.2.3.50/ups/ - если он настроен, вы окажетесь на странице, которая предложит вам отключить все функции, которые вам не нравятся. Включая инъекцию Javascript.

Удачи! Алекс.

7 голосов
/ 08 марта 2013

Если вы пишете свои собственные сайты, добавление заголовка сработало для меня:

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

Обязательно используйте его перед отправкой данных в браузер.

5 голосов
/ 19 марта 2013

Я нашел трюк.Просто добавьте:

<!--<![-->

После:

<html>

Дополнительная информация (на немецком языке):

http://www.programmierer -forum.de / bmi-speedmanager-und-со-deaktivieren-ALS-вебмастера-t292182.htm # 3889392

1 голос
/ 22 мая 2013

PHP: заголовок («Cache-Control: no-transform»); Спасибо! Я рад, что нашел эту страницу.

Этот скрипт Injector испортил исходный код моей страницы php, из-за чего я подумал, что допустил ошибку в кодировании php при просмотре исходного кода страницы. Хотя скрипт был заблокирован с помощью Firefox, добавлен NoScript. Это все еще испортило мой код. Что ж, после этой раздражающей дилеммы я хотел полностью избавиться от нее, а не просто блокировать ее с помощью дополнений adblock или noscript firefox или просто на моей странице php.

  1. STOP http: // 1.2.3.4 Полностью в Firefox : Получить дополнение: Изменить Заголовки .
  2. Перейдите к опциям изменения заголовка, добавьте опции ... теперь на вкладке Заголовок.
  3. Выберите действие: выберите ДОБАВИТЬ.
  4. Для имени заголовка введите: cache-control
  5. Для значения заголовка введите: без преобразования
  6. Для комментариев введите: Блок 1.2.3.4
  7. Нажмите добавить ... Затем нажмите Пуск.

Скрипт 1.2.3.4 больше не будет вставляться в другие страницы! да!

Я больше не вижу, чтобы 1.2.3.4 был заблокирован NoScript. потому что это не там. да.

Но я все равно добавлю: PHP: Header ("Cache-Control: no-transform"); на мои php-страницы.

1 голос
/ 11 октября 2011

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). Существует также дополнение Firefox, называемое «blocksite» или как более радикальный сброс подхода.TCP-соединение с 1.2.3.0/24:80 на вашем брандмауэре.Но, к сожалению, это не устранило бы ущерб.

Достаточно забавная поддержка мобильных и широкополосных сетей T-mobile и Verginmedia не знает об этой функции!(2011.10.11) * * 1 010

0 голосов
/ 16 июня 2015

Хорошо, ничего не работает для меня.Затем я заменяю 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
}
0 голосов
/ 03 марта 2015

Я добавил к /etc/hosts

1.2.3.4 localhost

Кажется, это исправили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...