Как я могу защитить маршрут express без аутентификации? - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь реализовать метод GET с Express в моем приложении nodeJs. Я хотел бы сделать что-то подобное для отображения пользовательских данных:

router.get("/user/:idUser", (req, res) => {

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

Как я мог продолжить? Я думал об использовании некоторого процесса шифрования, чтобы иметь что-то вроде:

/user/PdfgdfJFDGTfrfgdsf

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

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

ЕДИНСТВЕННЫЙ способ решить эту проблему - использовать некоторую форму аутентификации. Пользователь должен доказать серверу, что ему разрешено просматривать эти данные, прежде чем пользователь отобразит для них страницу.

Да, вы можете скрыть URL-адрес (сделать его в основном неосуществимой строкой символов), но Непонятно, какую проблему решает. Пользователь сам не сможет запомнить его или напечатать, так что, вероятно, это будет ссылка на веб-странице, и если это ссылка на веб-странице без проверки подлинности, то любой сможет получить к ней доступ, что приведет к поражению цели.

В некоторых случаях временные ссылки (часто выполняемые для привилегированных загрузок), такие как то, что вы упоминаете /user/PdfgdfJFDGTfrfgdsf, отправляются через аутентифицированный канал (либо аутентифицированную веб-страницу, либо отправляются на адрес электронной почты, который, как известно, принадлежит аутентифицированному каналу). user), и эти ссылки содержат некоторый уникальный и трудно угадываемый код. Затем пользователь может щелкнуть эту ссылку (на веб-странице, прошедшей проверку подлинности, или в электронной почте) и получить доступ к этому ресурсу без дальнейшей проверки подлинности. В этом случае знание кода в URL служит формой подтверждения подлинности. Поскольку URL-адреса могут быть зарегистрированы в поставщиках услуг или корпоративной инфраструктуре и, таким образом, не могут оставаться полностью частными, этот метод имеет свои ограничения и обычно используется только для краткосрочного (загрузите этот ресурс в течение следующих 10 минут) типа использования, а не для долгосрочной замены для аутентификации и не используется для вещей, которые требуют реальной безопасности. Вы недостаточно подробно объясняете свой вариант использования, чтобы знать, целесообразно ли это для вашей ситуации.

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

Это противоречивое утверждение. Вы говорите «пользователю не требуется аутентификация для выполнения этого кода» , а затем вы говорите «Я не хочу, чтобы кто-либо мог выполнить этот запрос с идентификатором пользователя другого лица. ". Вы не можете иметь оба. Пользователь либо обязан доказать авторизацию, либо нет. Выбери один. Это не может быть и то и другое.

0 голосов
/ 29 февраля 2020

вы можете использовать jwt для этого и промежуточное программное обеспечение для этого

при декодировании токена jwt, вы можете реализовать logi c, чтобы проверить, если decodedToken.user_id (учитывая, что вы добавляете user_id при кодировании полезная нагрузка токена) равна :idUser в маршруте (или любом другом типе логики c, который вы хотите).

...