Приложение HTML / Javascript, работающее в файловой системе, проблема с безопасностью

StackOverflow https://stackoverflow.com/questions/163900

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Access to restricted URI denied" code: "1012

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

Я пытался сделать это таким образом:

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

Редактировать:Чтобы было понятно...Я не настраиваю внутренний хост для этого (слишком много бюрократии), и мы НЕ МОЖЕМ разместить это извне из-за извлекаемых данных.

ПРАВКА №2:Небольшое тестирование показывает, что я могу использовать IFRAME для отправки запроса.Кто-нибудь знает, есть ли какие-либо недостатки в использовании скрытого IFRAME?

Это было полезно?

Решение

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

Ссылка: MSDN

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top