Перехват сетевых вызовов для принудительной установки реферера заголовка HTML на ноль - PullRequest
0 голосов
/ 16 августа 2011

Я использовал Flex-компонент HTML в моем проекте AIR 2.7.Это оболочка для класса HtmlLoader.

Проблема заключается в том, что пустые ссылки в заголовках HTML автоматически устанавливаются в "app: // [appname] .swf".Это не является стандартным, так как поведение реферера по умолчанию должно вообще не устанавливать реферера.В результате я получаю отказ в доступе к определенным веб-сайтам, использующим iframes (поскольку местоположение изменяется из-за iframe, устанавливающего пустой реферер).

У меня нет контроля над этими запросами, при изменении источника не происходит никакого события.iframe.

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

Есть ли способ перехватить сетевые сообщения во Flex ??

РЕДАКТИРОВАТЬ:

После некоторого чата с сотрудниками Adobe я открыл ошибку в базе ошибок Adobe по этому поводу: https://bugbase.adobe.com/index.cfm?event=bug&id=2945647

Из моих комментариев извлечено больше информации:

Я пытался (с прокси Чарльз) эмулировать некоторые случаи для конкретного сайта.Когда отправляется пустой или действительный реферер для загрузки какого-либо файла SWF, он проходит.Тем не менее, он запрещает доступ по недействительным (например, app: //).Это подтверждает проблему с реферером.

нет формальной спецификации относительно того, что является действительным или недействительным.Я имею в виду, на каких сайтах я тестирую.Например, cdn.nitrome.com/games/rubbletroubletokyo/rubbletroubletokyo.swf имеет такую ​​проверку реферера и возвращает «Отказано в доступе».страницу, если запрос был отправлен с реферером, который он считает недействительным, например, app: //foo.swf или даже http://www.google.com. Он отправляет правильный файл, если реферер не отправляется ИЛИ со страницей, которая должна вызыватьSWF-файл (в данном случае http://www.nitrome.com/games/rubbletroubletokyo).

Приложение для детей и содержит веб-браузер.Разрешены только авторизованные сайты (либо родителями, либо издателями), и www.nitrome.com будет одним из них при запуске.Конечно, я должен убедиться, что все запланированное на старте будет работать!Мне удалось создать хак для nitrome.com, но он ДЕЙСТВИТЕЛЬНО конкретен.Нам придется создавать хаки для каждого веб-сайта, с которым мы сталкиваемся с проблемами, и это ... ну, это отнимает много времени и трудно поддерживать

Ответы [ 3 ]

1 голос
/ 18 августа 2011

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

Вот что я сделал для www.nitrome.com games.

Страница игры работает следующим образом: загружайте рекламу sfw в iframe, когда реклама завершена (или пользователь нажимает на пропустить), она изменяет содержимое iframe, чтобы загрузить swf игры.

Не удается из-за реферера, но я могу в коде выяснить (с таймером ...) об изменяющемся контенте, найти путь к SWF-игре (regex) и заставить фрейм contentWindow.location сделатьSWF путь.

Как я уже сказал, это хак и он действительно специфичен, но работает на удивление хорошо.

0 голосов
/ 18 марта 2014

Этот код работал для меня, я проверил заголовки в fidller. Иногда, если некоторые перенаправления происходят изнутри htmlLoader, вы получаете реферер вроде "http://adobe.com/applolo, я думаю, что это связано с некоторым перенаправлением javascript с использованием window.location, но я не уверен, для этого вам понадобятся некоторые хуки в JS, чтобы предотвратить это или обойти это.

var urlReq:URLRequest=new URLRequest(urlInput.text);
var headers:URLRequestHeader=new URLRequestHeader("Referer","test");
urlReq.requestHeaders=[];
urlReq.requestHeaders.push(headers);
browser.htmlLoader.load(urlReq);

В браузере кода есть объект HTML

0 голосов
/ 17 августа 2011

Вы не можете изменить значение HTTP_Referer из приложения Flex. [ источник ]. Цитировать:

«К сожалению, HTTP Referer нельзя изменить из приложений AIR»

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

Постер, похоже, испытывает аналогичное разочарование в отношении значения в значении реферера. Я должен задаться вопросом, есть ли какая-либо поддержка для утверждения, что это нестандартное «поведение реферера». Я удивлен, что любая веб-страница не работает, потому что было указано значение реферера

...