Socket.io Access-Control-Allow-Origin Wildcard - PullRequest
0 голосов
/ 03 марта 2020

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

Они выяснили, что по запросу GET:

/socket.io/?EIO=3&transport=polling&t=Mw3cXXq&sid=something-something

Access-Control Заголовок Allow-Origin является подстановочным знаком (*). Я попытался изменить его, установив заголовок, как описано в официальной документации по socket.io. Тем не менее, по этому URL-адресу он продолжает оставаться подстановочным знаком.

Это нормальное поведение и его можно игнорировать, или это вообще важно для безопасности? К сожалению, я не слишком уверен, что это за URL.

Хотел бы получить ответы на некоторые вопросы.

Вот код, как я пытался установить происхождение:

// First attempt:
io.origins(['http://mydomain']);
// Second attempt:
io.origins('http://mydomain');
// Third attempt:
io.origins(['mydomain']);
// Fourth attempt:
io.origins('mydomain');

1 Ответ

0 голосов
/ 03 марта 2020

Вы не устанавливаете заголовок Access-Control-Allow-Origin в своей текущей реализации. Посмотрите на приведенный ниже код вашего приложения узла express, в котором подробно описано, как установить разрешенные источники.

    var port = 3000;
    var https = require('https');
    var express = require('express');
    var app = express();

    app.use(function(req, res, next) {
      res.header("Access-Control-Allow-Origin", "https://www.aServerDomain.com");
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, 
      Content-Type, Accept");
      next();
    });

    var server = https.createServer(options, app);
    var io = require('socket.io')(server);

    // start of server
    server.listen(port, function(){
        console.log('listening on *: '+ port + "\n");
    });

io.origins - это функция, которая принимает два аргумента, строку и функцию обратного вызова. где success - логическое значение, указывающее, разрешено или нет начало. https://socket.io/docs/server-api/#server -origins-fn

Если вам необходимо использовать io.origins, вам нужно сделать это следующим образом:

    io.origins((origin, callback) => {
      if (origin !== 'https://example.com') {
        return callback('origin not allowed', false);
      }
    callback(null, true);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...