Я пытаюсь внедрить политики безопасности контента (CSP) на сервере node, и у меня возникают проблемы с настройкой socket.io. Похоже, я неправильно настроил connectSrc
в приведенном ниже коде. Может ли кто-нибудь предложить правильный способ создания шлема, чтобы браузерные сокеты разрешались браузером? Спасибо заранее!
Я использую модуль шлема для генерации CSP; ниже приведен код, который устанавливает CSP:
securitySetup = function(app) {
var connectSources, helmet, scriptSources, styleSources;
helmet = require("helmet");
app.use(helmet());
app.use(helmet.hidePoweredBy());
app.use(helmet.noSniff());
app.use(helmet.crossdomain());
scriptSources = ["'self'", "'unsafe-inline'", "'unsafe-eval'", "ajax.googleapis.com"];
styleSources = ["'self'", "'unsafe-inline'", "ajax.googleapis.com"];
connectSources = ["'self'"];
return app.use(helmet.contentSecurityPolicy({
defaultSrc: ["'self'"],
scriptSrc: scriptSources,
styleSrc: styleSources,
connectSrc: connectSources,
reportUri: '/report-violation',
reportOnly: false,
setAllHeaders: false,
safari5: false
}));
};
Это отлично работает для всего трафика HTTP/AJAX, но не работает для протокола ws://. Я получаю эту ошибку в хром-отладчике при подключении socket.io:
Refused to connect to 'ws://localhost:3000/socket.io/1/websocket/ubexeZHZiAHwAV53WQ7u' because it violates the following Content Security Policy directive: "connect-src 'self'".