로그인시 및 주기적으로 세션 식별자 교체해 주기#1245
Conversation
|
@kijin https://github.com/xpressengine/xe-core/releases/tag/1.7.7.2 1.7.7.2 릴리즈 노트 참고 부탁드립니다. 1.7.6에서 추가되었었으나 IE에서 세션 아이디 갱신이 안되는 경우가 있고, 가상 사이트에서 문제가 있어 1.7.7.2에서 제거된 부분입니다. |
|
IE8에서 session_regenerate_id 함수 사용 시 세션 쿠키를 잃어버리는 문제 해결 방법 링크
이 방법 테스트해줄 분 없을까요? |
|
@izuzero 님 링크를 보니 IE8 버그는 큰 어려움 없이 우회가 가능할 것 같습니다. IE8일 경우 다른 방식을 써주면 되니까요. 더욱 안전을 기하기 위해 POST (컨트롤러) 요청 도중에는 세션 식별자를 변경하지 않고, 그 다음 정상적인 GET (뷰) 요청시에 변경하도록 예약하는 방법을 쓸 수도 있겠고요. 그러나 IE8도 다 그런 것이 아니라 어떤 컴퓨터에서만 버그가 생긴다고 하니, 버그 있는 컴퓨터를 찾는 것이 일이군요 ㅠ 이제 보니 업로더 쪽에서도 문제가 발생할 수 있겠군요. swfupload가 세션 처리를 제대로 못해줘서... #1086 에서 논의하고 있는 업로더 교체가 현실이 된다면 세션 문제도 훨씬 간단해지지 않을까 합니다. (그때까지 기다려드릴 수 있습니다 ^^) 가상 사이트나 SSO 사용시 발생할 수 있는 문제에 대비하여, 1.7.6에서처럼 덜컥 기본으로 적용해버리지 말고 사용자가 원하는 경우에만 세션 보안을 강화하도록 옵션으로 제공하는 방법도 있겠네요. 아예 이 애드온처럼 세션 식별자는 그대로 두고 다른 쿠키를 사용해서 보안을 향상시키는 방법도 있겠고요. |
|
IE8 세션망각 버그는 불행히 PHP 개발팀에서는 "not a bug", "won't fix" 등의 반응으로 일관하고 있습니다. |
|
일단 손쉬운 배포와 폭넓은 테스트를 위해 애드온으로 방향을 전환했습니다. IE8 버그와 업로더 문제 때문에 상당히 복잡해지는 코드를 어쨌든 단순한 편의기능이 아니라 보안 취약점과 직결될 수 있는 문제인 만큼, 써드파티 애드온에 의존하기보다는 언젠가 코어에 흡수되어야 할 기능이라고 생각합니다. 애드온의 형태로 일단 안정화를 거친 후, 정리해서 코어에 흡수시킬 수 있으면 좋겠습니다. (그래서 PR은 계속 열어두겠습니다 ^^) |
|
블랙베리도 같은 문제가 생기는군요. 처음 알았습니다. |
우연히 XE 코드베이스를 대상으로
session_regenerate_id()를 검색해 보았는데 단 1개의 검색 결과도 나오지 않더군요. 실제 테스트해 보아도 로그인 전후에 세션 식별자가 바뀌지 않아서, 로그인 전에 누군가가 세션 식별자를 탈취할 경우 로그인 후에도 계속 사용할 수 있겠고요.그래서 세션 식별자를 기본 10분 간격 + 로그인 및 회원정보 변경시 추가로 교체해 주도록 하는 코드를 작성해 보았습니다. 물론 로그인 상태는 계속 유지됩니다. (로그아웃 및 탈퇴시에는 이미
session_destroy()를 해주고 있으므로 상관없습니다.)일반적인 환경에서는 아무 문제도 발생하지 않는 것 같지만, 혹시 SSO처럼 특별한 환경에서 XE를 사용하거나 세션DB를 다른 프로그램과 공유하는 경우 문제가 발생할지도 모르겠습니다. 테스트 부탁드리고, 혹시 과거에 어떤 이유론가 세션 식별자를 교체하지 않기로 결정한 적이 있다면 그 이유가 아직 유효한지 가르쳐 주시면 감사하겠습니다.