어제 우연히 테스트를 해봤습니다.

 

비밀번호가 노출되었다는 것을 스스로 인지했음을 가정하고 제가 비밀번호를 새롭게 변경했습니다. 그런데 예상과는 다르게 여타 다른 단말기들의 로그인 상태가 계속 유지가 되더군요.

 

이럴경우 악의적인 대상이 로그인상태로 할 수 있는 활동을 여전히 하고 있을 것으로 생각하니 찜찜했습니다. 회원들도 이 사실을 안다면 굉장히 찜찜할 것 입니다.

 

특히 이 악의적인 대상이 자동로그인을 사용했다면 그 상태가 더 오래 유지될 가능성이 매우 높습니다. 저는 왜 비밀번호 변경시 변경성공한 단말 이외의 다른 단말기들의 로그인상태를 비로그인 상태로 전환을 시키는 작업이 없을까? 하는 의문이 생겼습니다.

 

 

1.로그인을 유지시키는 것이 세션이라는 불리우는 것이 담당하는건가요?

2.비밀번호수정 완료 액션에 이 로그인과 관련된 세션을 지우는 작업을 수행하는 애드온이 실현 가능한가요?

- 비밀번호수정한 단말은 제외

3.이건 모든 XE사용하는 사이트에 적용이 되어야 하는 거 아닐까요?

4.제가 가진 의문에 오류사항이나 다른 제가 알고 있지 못하는 부분이 있나요??

 

 

웹지기

profile
10년을 다루다 보니 이제 간단한 것도 만들고 커뮤니티 운영에 관한 다양한 노하우가 있습니다. 어려운 점이나 가지신 생각을 함께 소통해 보아요.
https://rxtip.kr/ 라이믹스 꿀팁
  • profile

    1. 네.

     

    2. XE타운에서 사용중인 자동로그인 모듈에 비슷한 기능이 있습니다만, 자동로그인을 사용하는 단말기만 삭제되고 일반 로그인은 그대로 유지될 것 같습니다.

     

    3. 보안상 아주 쓸모있는 기능이기는 합니다만...

     

    4. 기본적으로 PHP에서는 현재 세션 이외의 세션을 조작할 수 없습니다. 일반적인 방법으로는 같은 회원이 다른 곳에서 로그인했는지 파악할 수도 없고, 다른 세션을 강제로 로그아웃시킬 수도 없습니다. "인증 세션 DB 사용"을 켜두셨다면 DB에서 다른 세션을 검색하여 삭제하는 것이 가능하겠지만, 성능 문제 때문에 대체로 안 쓰는 기능이죠.

     

    세션을 DB에 저장하지 않고 우회적으로 차단하는 방법이 없지는 않으나, XE의 실행구조상 로그인 처리보다 애드온 처리가 나중에 이루어지기 때문에 애드온으로 구현하려면 상당히 귀찮아집니다. 세션 쉴드 애드온도 꽤 지저분한 방식을 사용하고 있고, 처리 시점이 늦기 때문에 100% 안전하지도 않습니다. (강제 로그아웃시키기 전에 이미 위험한 행동을 했을 수도 있어요.)

  • profile profile

    2.자동로그인 모듈이 공홈에 배포중인 자료라면 그것으로 테스트해보았으나 자동로그인 등록이 다른 단말기들이 삭제 되지 않아요. 해당 단말기들에서 로그아웃을 해줘야 삭제가 됩니다. 

     - 일단 자동로그인 등록이라도 삭제가 가능한지 이슈를 남겨드렸는데 오랜 이슈도 처리를 안하고 계시더라구요.

    4.번에 의하면 현실적으로 가능하지 않은 방법이라는 설명이시네요.

  • profile profile

    추가로 4번 설명에서 강제 로그아웃시키기전에 이미 위험한 행동을 했을수도...
    - 이부분은 어쩔수 없는 상황이니 이를 염두한 건 아니구요. 내가 인지한 시점에서 가장 빨리 일단 그 사람의 로그인 상태를 로그아웃 으로 만들어야 하지 않냐 하는 관점이에요.
    - 패스워드 탈취가 아닌 로그인상태의 브라우저를 우연히 발견하고 이상행동을 하고(회원에게 마이너스적인 활동) 있는 상황이라면 일단 그 행위를 멈추게 해줄 수는 있을거 같다는 생각을 했습니다.

  • profile profile

    혹시 이 자료는

    https://xe1.xpressengine.com/index.php?mid=download&package_id=22753492

    같은 방식으로 처리되는 것 같은데요. 이 자료도 그렇다면 동작을 안하고 있을까요? 이 자료는 패스워드 변경이 아닌 제한일 설정하면 즉시 로그아웃처리를 한다는 애드온인데요.

    ---------------------------------------------------------------

    코드를 살펴보니 케이스가 달라서 비교가 어렵군요.

    보니까 제한이 걸렸으면 이라는 조건과 로그인이라면 이라는 조건으로 

    $oMemberController->procMemberLogout(); 

    으로 로그아웃 처리를 하네요..

     

    그런데 지금 현재 제가 생각하고 있는것은 비밀변호가 변경되었다면 이라는 조건이 필요해서 적용이 어렵겠군요.

     

     

  • profile ?
    로그아웃시킨다는 점은 동일하지만, 기진곰님 말씀처럼 XE 구조상 중복 접속자를 로그아웃시키는 것은 쉽지 않습니다. 애드온으로 구현하면 뭔가 깔끔하게 처리가 안되고 코어를 건들여야 깔끔하게 처리가 될 것 같네요.

    비밀번호가 변경되는 순간 다른 접속자들에게 로그아웃하라는 명령을 내려야하는데, 인증 세션 DB 사용을 켜놓지 않았다면 로그인 하고 아무런 활동도 하지 않으면 로그아웃 처리를 할 수가 없는거죠.
  • profile profile
    이게 그나마 가장 비슷한 기능인 것 같네요.

    별도로 날짜를 지정해 놓고 그 날짜 이전에 만들어진 세션은 인정하지 않는다는 점에서 제가 생각하고 있던 방식과 흡사하지만, 회원 모듈의 limit_date와 달리 비밀번호 변경 시점은 따로 기록되지 않기 때문에 처리가 조금 더 복잡해질 것 같습니다.
  • ? profile
    아무런 활동을 안하는건 괜찮구요. 활동을 위해 페이지 이동을 하는 순간 로그아웃 처리가 되는거죠. 인증세션 DB 사용은 무리가 있다는 것은 같은 생각이에요.
  • profile profile
    그러니까요. 그게 가장 큰 걸림돌로 예상했어요. 방금 비밀번호가 변경되었다는 기록이 없으니 조건을 걸수가 없다는 거요 ㅡㅡ;
  • profile profile

    files/member_extra_info 폴더 내에 회원마다 각각 파일을 만들어서 비번 변경 시점을 별도로 기록해 두는 방식이 되어야겠네요. 비번 변경을 감지하는 것은 member.procMemberModifyInfo 트리거를 사용하거나 애드온에서 act를 기준으로 잡아내고요.

  • profile profile
    아마 XE팀에서는 이런거 처리 해줄리가 없으니 별도 모듈이라도 패스워드변경 기록모듈 + 애드온 으로 하면 처리가 가능해지겠군요.. 흠....

    사실 어제 네이버로그인에서 보호조치로 인해 타 단말기들이 다 로그아웃 처리가 되는데 api 연동한 xe에서 로그인이 계속 유지되길래 api 사용이 잘못된 줄 알았습니다. 혹시나 해서 소셜로그인을 사용하지 않는 저희 사이트에서 테스트를 해보니 구조적으로 대비가 안되어있더라구요...