0

Hya,socket.io Доступ запрещен в IE10 на SharePoint2013

Я бегу сервер Socket.io в среде NodeJS под HTTPS. Код js, который вызывает мое приложение для начала связи с моим сервером socket.io, запускается экземпляром sharePoint 2013 (Office 365).

Если я посещаю свою страницу в Chrome или Firefox, все работает отлично. В IE10 я получаю следующее Уоринг от Socket.io клиента в консоли

SCRIPT5: Access is denied. 
socket.io.js, line 1641 character 9 

который является следующей строкой

xhr.open('GET', url, true); 

кажется, что либо цА или IIS из SharePoint предполагает XSS при использовании jsonp/xhr - опроса. Настроенные транспорты

  • 'JSONP-опрос'
  • 'WebSocket'
  • 'XHR-опрос'

в таком порядке. Мы используем

  • SocketServer 0.9.16
  • SocketClient 0.9.11

Только для целей тестирования я просто установить

io.util.ua.hasCORS = false; 

на линии 1626, которая помогает, но приводит, конечно, к предупреждение о безопасности всего

SEC7130: Potential cross-site scripting detected 

Кто-нибудь знает, что я делаю неправильно или в чем проблема? Заранее спасибо!


редактировать после того, как я сделал некоторые дополнительные исследования я нашел следующее обсуждение googleGroups. Также я прокомментировал мой GitHub Issue

+0

Из-за соображений безопасности вам необходимо подключиться к одному серверу и порту, чтобы предотвратить CORS. Современные браузеры могут игнорировать его при определенных обстоятельствах, а некоторые будут обладать дополнительной способностью преодолевать его с помощью заголовков или около того, но, как правило, он недостаточно хорошо поддерживается, поэтому вам нужно попробовать иметь WebSockets на одном домене (не обязательно сервер), так как HTML сервер из. – moka

ответ

1

Исправлено! Решение заключается в том, что вам нужно добавить p3p header bevor, который вы отправляете cookie. Заголовок должен выглядеть примерно так

res.setHeader("p3p", "CP=\"COM CNT DEM FIN GOV ONL OTC PHY ALL DSP NID OHO CUR OUR BUS IND LEG NOR STP\""); 
0

Установите точку останова на линии и проверьте URL-адрес. Мое приложение работает в http://www.localhost/(...), а URL-адрес был http://localhost/(...).

Перед

var socket = io.connect('http://localhost:4000', { query: "fk="+my_id });

После

var socket = io.connect('http://www.localhost:4000', { query: "fk="+my_id });

С уважением.

Смежные вопросы