[텍스트큐브] PHP 7.3 이상에서 관리자 인증이 잘못되는 문제 깁기 (TC 1.10.10)

  앞서 올린 "[텍스트큐브] PHP 7.3으로 쓸 때의 사소한 문제와 심각한 보안 문제"에서 이야기한 대로 PHP 최신판을 쓸 때에는 텍스트큐브 1.10.10판이 관리자 인증이 잘 되지 않는 문제가 있습니다.

  PHP 7.3 이상에서 쓸 때에 텍스트큐브 1.10.10에 아이디와 비밀번호를 넣어 관리자로 인증(로그인)하면, 아이디와 비밀번호를 넣은 웹 누비개에서는 관리자로 인증되지 않습니다. 하지만 같은 아이피를 쓰는 모든 곳에서 이미 열려 있던 다른 모든 웹 누비개에서는 관리자로 들어갈 수 있게 됩니다.

  정확히 왜 그런지는 모르지만, 7.3으로 판올림한 PHP에서 세션(session) 기능에 달라진 점 때문에 세션 아이디를 붙이고 바꾸는 기능이 제대로 작동하지 못하는 것 같습니다.

  아래는 관리자 인증이 잘 되도록 고친 파일입니다.

  이 zip 압축 파일에 실린 Textcube.Control.Session.php 파일을

텍스트큐브_설치_경로/framework/legacy/

에 덮어 쓰면 됩니다.

  아래는 바꾸거나 더한 내용입니다.

  • 관리자 세션 아이디는 16진수 난수로 만들지 않고 session_regenerate_id 함수로 바꾸게 함
  • 세션 유효 시간($service['timeout'])이 지난 관리자 세션은 다시 접속했을 때 인증된 상태가 이어지지 않게 함
  • 세션 DB에 agent(웹 누비개, 운영체제 등의 정보)가 기록되게 함
    (세션 DB 용량이 늘어날 수 있음)
  • PHP 기본 세션 문자 길이가 32자가 아닐 때에도 인증되게 함 (2020.11.28)
  • 세션이 닫힐 때 10% 확률로 gc 함수를 돌림 (2020.11.28)
  • 세션이 닫힐 때 gc 함수를 돌리지 않게 함 (2021.4.7)

  PHP 7.2 이하에서 잘 작동하는지는 시험하지 못했습니다. 올바르지 않게 작동하는 데가 있으면 나중에 더 고칠 수 있습니다.

글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요

  1. 모아로그 2020/03/23 01:32 고유주소 고치기 답하기

    apache 2.4.18
    php 7.0.7
    mariadb 10.1.13

    환경에서 사용하는데 이상없이 동작하는군요.
    간혹가다 로그인이 풀리는 현상이 발생 되곤 하나 크게 불편한 점은 아니라,
    나중에 php 버전을 7.3으로 판올림 하게 된다면.유용한 정보일듯하여 먼저 찜합니다.
    좋은 정보 공유 감사합니다.

    • 팥알 2020/03/23 02:44 고유주소 고치기 답하기

      고맙습니다.
      PHP 판을 7.2보다 높게 올리지 않는다면 이 문제는 신경 쓰지 않아도 됩니다.
      하지만 어쩌면 로그인이 풀리는 현상에서 불씨가 있었을지 모르고, 저도 놓치고 있는 데가 있을 수 있습니다.

  2. steelk 2022/04/16 23:39 고유주소 고치기 답하기

    안녕하세요
    텍스큐브 처음 사용자입니다
    개인 서버 운영중이고 최신 안정 버전 설치 하여 운영 해볼려고 합니다만... 로그인 문제까지 해결 했습니다만 로그 아웃 누르면 계속 페이지 찾을 수 없다고 나오네여... 방안 있을까요..? ㅠㅠ

    서버 아파치 php 7.2 마린디비 사용중입니다 ㅠ

    • 팥알 2022/04/17 01:25 고유주소 고치기 답하기

      텍스트큐브의 자체 캐시가 완벽하지 않은 데가 있어서 캐시를 끄면 나아지는 점은 있습니다.

      자세한 건 디버그 오류문을 보아야 실마리를 좀 잡을 수 있습니다. 어쩌면 하루이틀에 풀 수 있는 문제가 아닐 수도 있습니다.

    • steelk 2022/04/17 17:36 고유주소 고치기 답하기

      네.. 답변 감사합니다

  3. 강승필 2023/01/14 21:33 고유주소 고치기 답하기

    7.3 에서는 위 파일로 패치를해도 관리자 로그인이 안되네요. 다른문제도 많은가 보군요.
    이하버전에서는 아무런 문제가 없나요?

    • 팥알 2023/01/15 04:03 고유주소 고치기 답하기

      텍스트큐브가 PHP 7.3부터 인증이 안 된 것은 32자리였던 PHP의 세션 길이 기본값이 더 짧아진 것에 대비하지 못한 것이 주요 원인이었던 것 같습니다.
      이 점을 유의해서 PHP 인증 세션 길이를 따로 바꾸지 않으면, PHP 7.2 이하판에서는 텍스트큐브 공식판을 그대로 써도 문제가 없을 겁니다.

      위에 올린 파일이 허술해서 안 될 수도 있지만, 인증이 안 되는 상태에서 넣은 인증 정보가 남아서 로그인이 안 되기도 합니다. 웹 누비개(브라우저)의 캐시와 DB의 세션 테이블을 비운 다음에 해 보면 로그인이 될 수도 있습니다. 텍스트큐브에 쿠키 이름을 바꾸는 기능이 들어갔는데,(제가 건의해서) 관리자 화면이나 config.php에서 쿠키 이름을 바꾸면 쿠키를 지우는 것과 같은 효과를 낼 수 있습니다.