현재 생각은 User
对象,其中包括uid
, username
, password
, isLogined
等。然后设置一个拦截器,在用户第一次请求(session开始)的时候,从数据库中根据user.isLogined
判断用户是否登录,如果登录了就在session级别上设置isLogined
를 true로 정의하는 것입니다. 그렇지 않으면 로그인 페이지로 리디렉션됩니다.
그런데 이 경우 사용자가 처음 요청할 때 사용자의 신원을 어떻게 확인해야 하나요? 쿠키에 uid
가 설정되어 있으면 이 uid는 다른 사람이 위조할 수 있어 잠재적인 보안 위험이 발생할 수 있습니다.
이 문제에 대한 좋은 해결책이 있나요?
저의 가장 큰 문제는 사용자의 로그인 ID의 적법성을 어떻게 판단할 것인가입니다. 이제 제 생각은 사용자 ID를 암호화하여 쿠키에 저장하는 것입니다. 사용자 ID입니다. 이것이 합리적인지 묻고 싶습니다.
이 위험은 엄청납니다. uid가 다른 사람의 uid로 변경되고 해당 사람이 로그인되어 있으면 다른 사람으로 로그인됩니다
계획을 따르세요:
1, 쿠키의 uid를 암호화로 설정하거나 의미 없는 임의의 문자열
2, 이 문자열을 사용하여 db 또는 캐시와 비교하고 보안 강화를 위해 IP 또는 사용자 에이전트를 동시에 확인
3, 세션 만료 정책을 고려
먼저 데이터베이스에 사용자 정보를 저장하고 설정해야 합니다
isLogined
默认为FALSE
,每次登陆成功后更新为TRUE
,退出后更新为FALSE
;判断登陆成功的标志用userName userPass 匹配,还有isLogined
判断;最后设置判断级别,先isLogined
后用户密码
;로그인 상태는 적어도 관계형 데이터베이스에는 저장하지 않는 것이 좋습니다. 토큰은 사용자 로그인 확인이 완료된 후 반환될 수 있으며 모든 후속 사용자 요청은 인증 필드에 이 토큰을 포함합니다. 헤더에 대해 자세히 알아볼 수 있습니다. jwt 및 관련 구현을 살펴보겠습니다
귀하의 현재 방법에 따르면, 제가 로그인하지 않은 익명 사용자이고 귀하의 인터페이스 중 하나를 요청한 다음 user.isLogined를 기반으로 데이터베이스에서 사용자가 로그인했는지 여부를 가로채서 판단한다면, 문제가 발생합니다. user.isLogined의 사용자는 누구입니까?
직접 로그인한 후 세션에 사용자 로그인 성공 정보를 넣는 것이 좋습니다. 요청 시 인터셉터를 사용하여 세션을 확인하세요. 이 데이터베이스 액세스 작업은 요청마다 비용이 많이 듭니다. .