세션의 경우 쿠키보다 한단계 높은 보안용도로 생각하는 경우가 많다. 하지만 전혀 보안이 높은건 아니다.
세션도 쿠키가 있어야만 작동되기 때문에 쿠키가 탈취당하는 순간 한방으로 끝날 수 있다.
따라서 세션의 보안성을 높이기 위해선 인증 쿠키를 여러개를 구어서 세션정보와 함께 대조하도록 만드는게 좋다.
즉 쉽게 설명하면 보안 인증 쿠키를 구어서 세션 변수내 인증키 값 + 쿠키 인증키 값을 매번 갱신하여 두개를 비교하면 어느정도 방어가 가능하다.
다시말해 세션 a 를 탈취당했을 경우 분명 인증 보안 쿠키도 탈취를 당했을 것이다. 하지만 브라우저를 닫지 않는이상
세션 변수내 인증키 값+인증 쿠키값은 매번 본인의 고유값으로 갱신되어 서로 인증값이 달라질 경우 비교하여
세션을 삭제해버리는로직을 작성하면 방어가 가능하다.
다만 실시간으로 당하고 브라우저까지 닫히게 되었다면 답이 없다.
헛소리는 여기까지하고, 아무튼 쿠키 탈취는 보통 게시글 작성시 특정 스크립트 공격으로 탈취를 하기때문에
웹사이트 보안이 낮은곳은 되도록 피하도록 하자.
아래는 php.ini 가 아닌 php 단에서 세션 설정을 하는 방법이며, 기본적인 설정만 명시하였다.
<?php
ini_set("session.name", 'REDINFO'); // 세션명
ini_set("session.cookie_domain", "blog.redinfo.co.kr"); // 세션쿠키 도메인
ini_set("session.cache_expire", (60*24*365)*2); // 세션 유효시간 : 분
ini_set("session.gc_maxlifetime", (3600*24*365)*2); // 세션 가비지 컬렉션(로그인시 세션지속 시간) : 초
ini_set("session.cookie_lifetime", (3600*24*365)*2); // 미사용 세션 파기 시간 (0 - 브라우저 종료시 파기)
session_start(); // 세션 시작
session.gc_maxlifetime 설정은 세션 가비지 컬렉션이라고 하는데, 랜덤하게 오래된 세션을 삭제한다고 한다.
나같은 경우 2년으로 해두었는데, 이 설정이 어떻게 작동되는지는 지금도 궁금하다..