В Node.js с использованием Express ограничить доступ к маршруту на основе учетных данных пользователя - PullRequest
1 голос
/ 18 апреля 2020

В express приложении, где пользователи входят в систему, используя свои веб-идентификационные данные (google, facebook, amazon, et c), используя для этого паспорт. js Я создал маршрут. но только хочу, чтобы один пользователь имел к нему доступ. Он работает с обширным тестированием, но не совсем уверен, достаточно ли он безопасен? Вот мой код для маршрута:

app.get("/superSecretPage", function(req, res){
  console.log(req.user);
  if (req.isAuthenticated()){
    if (req.user.userId === "XXXXXXXXXXXXXXXX") {
      User.find({}, function(err, users){
        res.render("userlist", {
          users: users,
          });
      });
    } else {
    res.render("invalid")
    }

  } else {
    res.redirect("login")
  }
});

XXXXXXXXXXXXXXXX = быть уникальным идентификатором пользователя из Google / Amazon / Facebook или другого поставщика идентификаторов

Как я уже сказал, эта работа, и позволяет только пользователю это равно req.user.userId, но достаточно ли это безопасно?

Ответы [ 3 ]

0 голосов
/ 18 апреля 2020

Как я уже сказал, эта работа разрешает только пользователю, который равен req.user.userId, но достаточно ли это безопасно?

Вы действительно недостаточно показали, чтобы знать общая безопасность этого. Безопасность зависит как минимум от следующего:

  1. Реализация req.isAuthenticated()
  2. Как сеанс пользователя был установлен и защищен. В большинстве сеансов для идентификации сеанса используется браузер cook ie, и он должен быть запущен через https для обеспечения какой-либо защиты. Затем вы также должны иметь надлежащий автоматический выход из системы, чтобы снизить вероятность того, что сеанс просто останется активным, если кто-то другой может использовать его на этом компьютере.
  3. Как изначально установился req.user.userId. Вы не показываете это, поэтому мы действительно не имеем ни малейшего представления о том, что стоит за этим, и следит ли оно за соблюдением правил безопасности или нет.
  4. Если существует постоянное хранилище сеанса пользователя, то безопасность этого механизма хранения
  5. Предполагается, что существует механизм входа в систему, требуются ли безопасные (трудно угадываемые) учетные данные? Существуют ли средства защиты от взлома, чтобы попытаться помешать угадыванию учетных данных.

Если вы на 100% уверены, что req.user.userId допустимо и что это соединение принадлежит соответствующему пользователю для userId, то этот бит кода работает нормально. Но дьявол кроется в деталях того, чтобы убедиться, что req.user.userId надлежащим образом подключен к авторизованному пользователю, и именно в этом заключается тяжелая работа по обеспечению безопасности.

0 голосов
/ 21 апреля 2020

Добавьте поле в схему БД и установите для него массив, содержащий все маршруты, к которым у пользователя есть доступ. При аутентификации l oop через массив, чтобы увидеть, может ли он / она получить доступ к маршруту, по которому он / она пытается.

0 голосов
/ 18 апреля 2020

Это не правильный способ сделать это. Что вы будете делать, если хотите разрешить другому пользователю позже? Будете ли вы открывать код и редактировать user Id?

Не жестко кодировать user ID.

Вам необходимо реализовать Контроль доступа на основе ролей . Вам необходимо создать сверхдержавую роль пользователя и назначить ее пользователям, которым вы хотите разрешить доступ к вашей суперсекретной странице . И используйте middlewares для проверки разрешений роли.

Это поможет вам: Аутентификация на основе ролей | NodeJS

...