Тот же повар ie отправлен всем клиентам - PullRequest
0 голосов
/ 07 марта 2020

Я не уверен, что это самое лучшее место, чтобы спросить об этом, но я действительно не знаю, где еще go. Вот ситуация.

Моя компания недавно внедрила SSO. Сам процесс SSO работает отлично. Теперь проблема в том, что, как только сервер получил ответ от службы единого входа, он генерирует cook ie и сеанс и отправляет ответ клиенту. Недавно мы столкнулись со странной проблемой, когда пользователь мог войти в систему и быть перенаправленным на панель мониторинга. Затем другой пользователь загрузит эту панель и войдет в систему как первый пользователь, вошедший в систему. Это произойдет для каждого пользователя, который зашел на сайт после этого (все они вошли в систему как первый пользователь).

Дело в том, что это не будет происходить каждый день. Это было непостоянно, но случилось так, что, очевидно, мы не могли позволить этому существовать в производстве. После нескольких дней копания статей мы в конечном итоге «решили» проблему, отключив кеширование через нашу компанию по веб-безопасности Cloudflare. С тех пор проблема не исчезла.

Это наводит меня на мысль, что, возможно, повар ie, содержащий идентификатор сеанса первого пользователя, вошедшего в систему, был каким-то образом кэширован cloudflare, а затем отправлен каждому клиенту. что просил этот сайт? Но это просто не имеет смысла, и я не смог подтвердить это подозрение ни в ходе испытаний, ни сканирования в Интернете.

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

Именно так мы раскручиваем сессии на нашем сервере.

let sessionObj = {
  secret: SESSION_SECRET,
  resave: false,
  saveUninitialized: true,
  cookie: {}
};

if (NODE_ENV === 'production') {
  sessionObj.cookie.secure = true;
  app.set('trust proxy', 1);
  const Client = redis.createClient({
    host: process.env.REDIS_HOST,
    port: process.env.REDIS_PORT
  });
  sessionObj.store = new RedisStore({
    client: Client
  });
}

app.use(session(sessionObj));
...