Приложение HTML / Javascript, работающее в файловой системе, проблема безопасности - PullRequest
3 голосов
/ 02 октября 2008

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

По сути, это просто HTML + Javascript (с использованием jQuery) для получения некоторых отчетов с использованием REST от сторонних разработчиков.

Проблема в том, что FF3 и IE не разрешают вызов ajax, я получаю:

Access to restricted URI denied" code: "1012

Очевидно, это проблема XSS ... как мне обойти это? Возвращенные данные в формате XML.

Я пытался сделать это так:

$.get(productUrl, function (data){
    alert (data);
});

РЕДАКТИРОВАТЬ : Для ясности ... Я не настраиваю внутренний хост для этого (много бюрократизма), и мы НЕ МОЖЕМ хостить это извне из-за извлекаемых данных. 1015 *

РЕДАКТИРОВАТЬ # 2 : Небольшое тестирование показывает, что я могу использовать IFRAME для выполнения запроса. Кто-нибудь знает, есть ли недостатки в использовании скрытой рамки?

Ответы [ 3 ]

2 голосов
/ 03 октября 2008

В аналогичной ситуации моим решением было использование Mark Of The Web, который представляет собой специальный HTML-комментарий, который распознает IE. Он помещает страницу в другую зону безопасности.

Ссылка: MSDN

0 голосов
/ 03 октября 2008

Контролируете ли вы сервер, предоставляющий данные? Если это так, вы можете настроить обратный вызов. Основная идея заключается в том, что у вас есть функция в скрипте, которая обрабатывает входящие данные (в вашем случае XML-строку) Затем сервер отвечает на запрос фрагментом JavaScript вашей функции обратного вызова со строкой в ​​качестве аргумента. И вместо того, чтобы использовать AJAX, вы добавляете новый тег сценария на страницу. Это основа для JSONP. Это выглядит примерно так.

местная страница.

<script>
    function callback(str) {
        alert(str);
    }
    function makeRequest(param) {
        var s = document.createElement('script');
        s.src = 'http://serveranywhere/script.bla?' + params;
        document.getElementsByTagName[0].appendChild(s);
    }
</script>

удаленный сервер возвращает

callback('<xml><that><does><something></something></does></that></xml>');

теперь, когда скрипт добавляется на страницу, функция обратного вызова будет выполняться в соответствии с предоставленной вами строкой. И вызов jQuery делает все это для вас, используя JSONP в вызове $ .ajax. Надеюсь, это поможет.

0 голосов
/ 02 октября 2008

Если у вас установлен Python, веб-сервер для обслуживания файлов может быть простым, как

python -c “import SimpleHTTPServer;SimpleHTTPServer.test()”

Редактировать: Оригинальный плакат не может использовать этот подход, но в целом я думаю, что это способ решить эту конкретную проблему для будущих пользователей с этой проблемой.

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