Это достаточная защита во внешнем интерфейсе?

В настоящее время я работаю над авторизацией в проекте стека MERN. Я создал внутренний API, который проверяет JWT, который имеет пользователь при попытке отобразить сайт.

Я покажу некоторую подробную информацию здесь, в «Псевдокоде»:

КАК СКАЗАНО РАНЬШЕ, ЭТО НЕ НАСТОЯЩИЙ СИНТАКСИС, ПРОСТО ВЫ МОЖЕТЕ ПОНЯТЬ, ЧЕГО Я ХОЧУ ДОСТИЖАТЬ.

Backend:
server(/auth){
validateJWT
res.json("Success")
on error res.json("Unauthorized")
}

Frontend:
Useeffect({
req.server("/auth")
if (response === "Success"){
render Page
}
else{
redirect to login
}
})

Таким образом, возможно, я использовал ловушку useEffect реакции, чтобы проверить, есть ли у пользователя действительный JWT, а затем визуализировать страницу, если да, и если она недействительна. Моя проблема в том, что я хочу убедиться и понять, сохранено ли это. Есть ли способы редактировать файлы js и перезагрузить компонент с отредактированными файлами js? Например, предположим, что у кого-то нет JWT, и он просто редактирует код следующим образом:

Useeffect({
req.server("/auth")
if (response === "Unauthorized"){
render Page
}
else{
redirect to login
}

это теоретически сработает? и если да, то как вообще можно защитить, например, панель администратора внешнего интерфейса?

🤔 А знаете ли вы, что...
С JavaScript можно создавать интерактивные формы и проверять введенные пользователем данные.


71
2

Ответы:

Решено

Безопасность не является обязанностью фронтенда. Это ответственность бэкенда. Твой

if (response === "Success")

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

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

Причина, по которой вы выполняете if (response === "Success") проверки на стороне интерфейса, — это пользовательский опыт. Это только для того, чтобы вы могли отображать красивую графику для пользователей. В противном случае им пришлось бы читать необработанные файлы JSON или XML. Не круто. Но это не имеет никакого отношения к безопасности.

Например, предположим, что у кого-то нет JWT, и он просто редактирует код следующим образом:

Если у вас нет JWT, сервер не должен обслуживать данные с ограниченным доступом. (Злонамеренный) пользователь все равно может обойти if (response === "Success") проверку и попытаться render Page, но откуда он возьмет данные? Например, вы можете визуализировать страницу администратора, но какая от нее польза без данных? Это просто пустая графика. Это как красивая обложка книги с пустыми страницами внутри.

При этом, если сервер обслуживает ограниченные данные без JWT, то возникает огромная утечка безопасности. Но опять же: это проблема и ответственность бэкэнда.


Чтобы избежать описанного сценария, вы можете отфильтровать текущий маршрут из приложения React на основе ответа, полученного от внутреннего API. Благодаря этому методу никто никогда не узнает о существовании этого маршрута. Если они знают, они не смогут изменить в JavaScript.

Более того, React Js не может отслеживать, когда мы вносим изменения в загруженные файлы JavaScipt (на вкладках «Источник»).