[튜닝] CSRF 보안 결함 으로 인해 다른 PC에서 관리자로 로그인 방지하는방법 (IP검사) 정보
[튜닝] CSRF 보안 결함 으로 인해 다른 PC에서 관리자로 로그인 방지하는방법 (IP검사)본문
작성: freeimage.kr 김성대
그누보드에서 CSRF 보안 결함 으로 인해 다른 PC 관리자로 로그인 방지하는방법 (IP검사)
방법 로그인할때 회원정보의 mb_10 필드에 접속시 IP를 저장해두고
common 에서 $member 를 읽을때 현재 IP 와 비교하고 틀리면 로그아웃 처리함..
1. /bbs/login_check.php 에서
// 회원아이디 세션 생성
set_session('ss_mb_id', $mb[mb_id]); 다음줄에 추가한다..
========================
//CSRF 보안 결함을 방지하기위해 다 IP에서 로그인시 DB 정보와 비교해서 다른 IP면 세션 종료하기
$sql="update {$g4['member_table']} set mb_10='".$_SERVER['REMOTE_ADDR']."'where mb_id = '$mb[mb_id]' ";
sql_query($sql);
========================
2. common.php 에서
// 회원이 아니라면 권한을 방문객 권한으로 함
if (!($member['mb_id']))
$member['mb_level'] = 1;
else
$member['mb_dir'] = substr($member['mb_id'],0,2);
다음줄에 추가한다.
========================
//로그인된경우 마지막 IP와 비교해서 다르면 자동 로그아웃
if ($member['mb_id'] && $member['mb_10'] && $member['mb_10']!=$_SERVER['REMOTE_ADDR']) {
session_unset(); // 모든 세션변수를 언레지스터 시켜줌
session_destroy(); // 세션해제함
set_cookie("ck_mb_id", "", 0);
set_cookie("ck_auto", "", 0);
$sql="update {$g4['member_table']} set mb_10='' where mb_id = '$member[mb_id]' ";
sql_query($sql);
echo "<script language='javascript'> window.location='/bbs/login.php'; </script>";
exit;
}
========================
1
댓글 3개
만약에 최고관리자외에 A,B,C라는 임시관리자가 있다면,최고관리자가 최초 로그인된 아이피를 임시허용을 하고,(단 공인아이피외에 사설아이피일경우 대역단까지는 허용해주고) -> 당연,인증버튼으로 인증을 해줘야 하겠죠.그리고 db와 조회해서 임시관리자의 아이피단이 틀리면,자동 블럭
그리고 다른 보드 보니까,멤버,또는 관리자 생성시 pid값(만약 멤버생성일이 2008년 12월12일이면:pid값 : 2008121200321)을 가지고도 체크하더라구요.타임스템프인가 먼가?