포럼

(공모전 때문인가요? 모듈이나 애드온을 만들면 자료실에 올리기만 하지 않고 포럼에 소개글을 쓰는 게 유행이 된 것 같네요.)


XSS 공격의 피해를 줄이기 위해서는 세션 쿠키에 httpOnly 속성을 주어야 하고, SSL 사용시에는 세션 탈취를 막기 위해 secure 속성도 주어야 하고, 세션 고정(session fixation) 공격을 피하려면 세션 식별자를 정기적으로 ( + 로그인/로그아웃 시점에) 갱신해 주어야 합니다.


이 3가지는 세션 보안의 기초 중에서도 가장 기초가 되는 원칙들입니다.


그러나 XE는 SSO 및 가상사이트 등 기존 기능과의 호환성 문제, 안 그래도 탈이 많은 업로더 세션 유지 문제, 그리고 그 밖에도 몇 가지 어려움이 있어서 세션 보안을 강화하지 못하고 있는 실정입니다.


그래서 PHPSESSID는 전혀 건드리지 않고, 세션과 연동되는 별도의 쿠키에 httpOnly, secure 속성을 적용하고 그것들을 정기적으로 교체해 주는 방식으로 애드온을 만들어 보았습니다. 이름하여 세션 쉴드!



md.png



그러나 사실 이런 게 언제까지나 애드온으로 돌아다녀서는 안됩니다. 세션을 안전하게 처리해 주는 것은 제3자가 만들어 뿌리는 일개 애드온이 아니라 XE 코어에서 공식적으로 해줘야 할 일이라고 생각하거든요.


안 그래도 로그인이 안 된다, 로그인이 풀린다는 버그 신고가 잦은 상황에서 코어를 잘못 건드리면 골치아파지니까 일단 애드온으로 만들어 본 것 뿐입니다. 안정성이 검증되면 곧바로 해당기능을 코어로 옮겨달라고 PR을 넣을 예정입니다.


그러려면 특수한(?) 환경을 포함하여, 광범위한 상황에서 테스트를 해봐야 합니다.


보안에 관심 있으신 분, 모험심이 강하신 분, SSO와 가상사이트 등 특수한 환경을 운영하고 계신 분, SSL을 절반쯤 적용하다 마신 분, IE8 방문자 비율이 비정상적으로 높은 사이트를 운영하시는 분, 그냥 어벤져(S.H.I.E.L.D.)를 좋아하시는 분 모두 환영합니다. 운영하시는 사이트에 가차없이 적용하고, 문제가 생기면 사정없이 투덜거려 주세요.


※ 곧 자료실에 게시될 v1.2 이상 버전을 사용하신다면 REFRESH_TIMEOUT = 0 으로 설정하여 세션 식별자의 정기적인 갱신을 막을 수 있습니다. (로그인/로그아웃시에는 여전히 갱신됩니다.) 로그인이 풀리는 문제가 여전히 발생한다면 이 설정을 변경해서 사용해 주세요.


원래 AJKJ님의 아이디어였습니다.


기술적 참고내용


※ git 사용이 가능하신 분은 테스트 기간 동안 자료실보다는 github에서 clone하여 사용하시고, github에 새 커밋이 등록되면 그때그때 pull해서 쓰시기를 권합니다. 자료실은 업데이트가 하루 정도 늦어지는 경우가 많아서요.

https://github.com/kijin/xe-session-shield

태그 연관 글
  1. [2014/09/17] 묻고답하기 xe첨부이미지파일 접속경로 (디도스방안 급함) by Piche *3
  2. [2012/02/01] 묻고답하기 XE 1.4.5.10에서 1.5.1.4로 업데이트 후 관리자 로그인 안됌.ㅜㅜ해결책?? by 포토올/wow *2
  3. [2011/10/06] 웹마스터 팁 로그인이 안되는 문제를 겪고 계시면 참고해볼만 합니다. by 안구건조 *2
  4. [2011/01/25] 묻고답하기 (기초) 세션 아이디를 알려주세요 HELP!! by 알 파치노 *1
  5. [2009/06/18] 묻고답하기 외부 페이지와 레이아웃 사이에 변수 값 전달... by Cityhunter