Остановить прокси-сервер мобильной сети от ввода JavaScript

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

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

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

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

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

Ответ 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

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

Ответ 2

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

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

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

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

тогда script не будет запускаться, поэтому ваши события и DOM будут оставлены в покое. С другой стороны, исходный script все равно оставил бы ваше пространство имен мусором, и все проблемы с разметкой, которые он вызывает, все равно будут присутствовать. Кроме того, пользователь будет застревать с повторно сжатыми изображениями, не в состоянии получить оригиналы.

Вы можете попробовать просто сообщить пользователю:

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

ИСПОЛЬЗОВАТЬ HTTPS!

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

С появлением Let encrypt получение сертификата теперь бесплатное и легкое. Там действительно нет причин не использовать HTTPS в этот день и в возрасте.

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

Ответ 7

ИМТ это не только на Vodafone. Verginmedia UK и T-Mobile UK также предоставляют вам эту дополнительную функцию по умолчанию и бесплатно.;-) В T-mobile он называется "Мобильный широкополосный ускоритель", Вы можете посетить: http://accelerator.t-mobile.co.uk или http://1.2.3.50/ для его настройки.

Если вышеуказанное не относится к вам или по какой-то причине не является вариантом вы можете настроить локальный прокси (Polipo w/wo Tor) Существует также аддон Firefox, называемый "блоксайтом", или как более решительный подход reset tcp к 1.2.3.0/24:80 на вашем брандмауэре. Но, к сожалению, это не устранит ущерб.

Забавно, что T-mobile и мобильная/широкополосная поддержка Verginmedia не знают об этой функции! (2011.10.11)

Ответ 8

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

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

  • STOP http://1.2.3.4 Полностью в Firefox: получите добавление: Изменить Заголовки.
  • Перейдите в заголовок изменения add on options... теперь на вкладке заголовка.
  • Выберите действие: выберите ADD.
  • Тип заголовка заголовка: управление кешем
  • Для заголовка Тип значения в: no-transform
  • Для типа комментариев в: Блок 1.2.3.4
  • Нажмите "Добавить"... Затем нажмите "Пуск".

1.2.3.4 script не будет вводиться на другие страницы! да!

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

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

Ответ 9

Если вы получаете его на сайте, который у вас есть или разрабатываете, вы можете просто переопределить функцию, установив ее в null. Это то, что сработало для меня просто отлично.

bmi_SafeAddOnload = null;

Что касается получения его на других сайтах, которые вы посещаете, то вы, вероятно, можете открыть консоль devtools и просто ввести их туда и уничтожить, если страница занимает много времени для загрузки. Тем не менее, это еще не проверено.

Ответ 10

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

1.2.3.4 localhost

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

Ответ 11

Ничего не работаю для меня. Затем я заменяю URL-адрес изображения каждую секунду, потому что, когда мои обновления DOM, проблема здесь снова. Другим решением является использование только фонового стиля auto в страницах. Ничто не является чистым.

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
}

Ответ 12

Эффективным решением, которое я нашел, было изменение файла хостов (/etc/hosts в системах типа Unix/Linux, C:\Windows\System32\drivers\etc в Windows), чтобы:

null 1.2.3.4

Что эффективно сопоставляет все запросы с 1.2.3.4 до null. Протестировано с моей Crazy Johns (принадлежащей Vofafone) мобильной широкополосной связью. Если ваш провайдер использует другой IP-адрес для введенного script, просто измените его на этот IP.

Ответ 13

Заголовок ( "Cache-Control: no-transform" );

используйте вышеуказанный PHP-код в каждом файле php, и вы избавитесь от инъекции кода 1.2.3.4.

Это все.

Я тоже страдал от одной и той же проблемы, теперь она исправлена. Попробуйте.