Остановить прокси-сервер мобильной сети от ввода 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.
Ответ 6
Я нашел трюк. Просто добавьте:
<!--<![-->
После:
<html>
Дополнительная информация (на немецком языке):
http://www.programmierer-forum.de/bmi-speedmanager-und-co-deaktivieren-als-webmaster-t292182.htm#3889392
Ответ 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.
Это все.
Я тоже страдал от одной и той же проблемы, теперь она исправлена. Попробуйте.