Я сделал админку в reactJs, которая управляет тысячами людей. Я хочу, чтобы администратор оставался в системе в течение 30 минут. После входа в систему с использованием имени пользователя и пароля сервер отправляет идентификатор пользователя, и я сохраняю этот идентификатор в файле cookie, потому что для каждого запроса я должен отправлять идентификатор пользователя в заголовке. а также сделал cookie-файл cookie, который показывает, что сеанс еще не завершен. и на compenentDidMount я поставил условие, что если cookie входа в систему существует, сделайте переменную истинной, примерно так:
if (this.store.cookieExist("4DeHn6")) {
this.store.changeSession(true);
this.store.changeId(this.uId);
else {
this.store.changeSession(null);
this.store.changeId(null);
}
и с помощью response-router, если сеанс открыт, я визуализирую страницу, иначе перенаправляю ее на страницу входа с таким кодом
<Route
exact
path = "/locations"
render = {() =>
!this.store.openSession ? (
<Redirect to = "/loginPage" />
) : (
<Locations />
)
}
/>
Я использую mobx для управления государством.
единственное, что я сделал, это превратил два имени cookie в строку, сгенерированную генератором паролей. Я действительно беспокоюсь за безопасность своего приложения, потому что думаю, если кто-нибудь проверит мой код в браузере, он сможет найти эти два файла cookie, войти в систему и получить конфиденциальные данные. для первой части проекта на сервере не используется токен. есть ли лучший и более безопасный способ сделать это? ценю любую помощь.
В конце концов, сервер отвечает только за запросы с действующим токеном.
После процесса входа в систему, когда вы установили токен, который отправляется в каждом заголовке запроса, сервер может определить, действителен ли токен, и дать вам ожидаемый ответ или сообщить вам, что вам не разрешено делать этот запрос с помощью отправка ответа 401 Unauthorised
.
Если вы используете промежуточное ПО, такое как axios, для обработки HTTP-запросов, вы можете легко установить перехватчик, который обрабатывает ответы 401
и отправляет вас на страницу входа. Что-то вроде этого:
responseError: error => {
switch (errorCode) {
case 401:
// your logout logic: delete the cookie, and set the session to false
}
return Promise.reject(error);
}
Это вызовет рендеринг, в котором ваш сеанс будет ложным, перенаправляя пользователя на страницу входа с вашей текущей логикой. А также повысит безопасность вашего приложения, не отвечая на недействительные или просроченные токены.
Надеюсь, это поможет!
спасибо, но проблема в том, что на первом этапе проекта, который длится около 2 месяцев, на сервере нет токена, поэтому я должен сделать свой код максимально безопасным, чтобы у меня не было никаких проблем до второго этапа .
Я решил использовать пакет cryptr для шифрования Я сделал что-то вроде этого:
а затем сделал шифрование и зашифровал мой секретный код и использовал его как секретный код в моем коде что-то вроде этого:
const cryptr = new Cryptr("EQqwmBsYQfptNPmHEkjVXSVvJFsE5XbsLFkzMj2WVcDcQHELFTB6JLF35tQfzrf6");
внешний код никогда не бывает безопасным. Вы должны решить, показывать ли страницу на стороне сервера, на основе сеанса, а не файла cookie, доступного пользователю.