로그인? 이후 관리자 페이지 접속 에러 문의
본문
사정상 '홈피주소/?root=admin' 이라고 접속하면 최고관리자 admin이라는 id로 접속을 하게 하려고 해봤는데요.
로그인은 됐지만 '관리자 페이지'에 들어가려면 '정상적으로 로그인하여 접근하시기 바랍니다.'라는 메세지가 뜨네요
코드는 index.php에서
<?php
if (!defined('_GNUBOARD_')) exit;
include_once('./_common.php');
if( isset($_GET['root']) ) set_session('root', $_GET['root']);
if( $_GET['root'] != 'admin' ) {
// 로그인 확인
if(!$member['mb_id']) {alert("로그인이 필요한 서비스입니다.", G5_BBS_URL.'/login.php');}
} else {
// 회원아이디 세션 생성
set_session('ss_mb_id','admin');
// FLASH XSS 공격에 대응하기 위하여 회원의 고유키를 생성해 놓는다. 관리자에서 검사함 - 110106
set_session('ss_mb_key', md5($mb['mb_datetime'] . get_real_client_ip() . $_SERVER['HTTP_USER_AGENT']));
}
방법좀 부탁드리겠습니다.
!-->답변 3
$mb['mb_datetime'] <== 이 값이 어디에도 없잖아요. 그러니 안되죠
// 회원아이디 세션 생성 <==다음에 넣으세요
$mb=get_member('admin', 'mb_datetime');
그런데 저런 처리가 무슨 의미가 있나요?
아무나 ?root=admin 으로 접속해버리면 관리자가 되어버리는데
전 세계 로봇이나 이상한 프로그램을 돌려서 홈페이지에 로그인 하기 위하여
무작위로 아이디를 넣어서 접속해오는 로그를 못 보셨나보네요
저런 것은 홈페이지 금방 사달 납니다
최소한 IP를 체크해서 지정한 IP만 관리자로 로그인 되는 조치가 필요합니다
아래의 코드들을 참고를 해보세요..
<?php
if (!defined('_GNUBOARD_')) exit;
include_once('./_common.php');
if (isset($_GET['root']) && $_GET['root'] === 'admin') {
$admin_id = 'admin';
// 최고관리자 계정 정보를 가져옵니다
$sql = "SELECT * FROM {$g5['member_table']} WHERE mb_id = '{$admin_id}'";
$admin = sql_fetch($sql);
if ($admin) {
// 회원아이디 세션 생성
set_session('ss_mb_id', $admin['mb_id']);
// FLASH XSS 공격에 대응하기 위하여 회원의 고유키를 생성해 놓는다. 관리자에서 검사함 - 110106
set_session('ss_mb_key', md5($admin['mb_datetime'] . get_real_client_ip() . $_SERVER['HTTP_USER_AGENT']));
// 관리자 페이지로 리다이렉트
header('Location: ' . G5_ADMIN_URL);
exit;
} else {
alert("관리자 계정이 존재하지 않습니다.");
}
} else {
// 로그인 확인
if (!$member['mb_id']) {
alert("로그인이 필요한 서비스입니다.", G5_BBS_URL.'/login.php');
}
}
?>
#######################################################
<?php
if (!defined('_GNUBOARD_')) exit;
include_once('./_common.php');
if(isset($_GET['root']) && $_GET['root'] == 'admin') {
$mb = get_member('admin');
if ($mb) {
// 회원아이디 세션 생성
set_session('ss_mb_id', $mb['mb_id']);
// 회원인증 세션 생성
set_session('ss_mb_key', md5($mb['mb_datetime'] . get_real_client_ip() . $_SERVER['HTTP_USER_AGENT']));
// 추가 세션 정보 설정
set_session('ss_mb_name', $mb['mb_name']);
set_session('ss_mb_nick', $mb['mb_nick']);
set_session('ss_mb_level', $mb['mb_level']);
set_session('ss_mb_point', $mb['mb_point']);
// 자동로그인 쿠키 설정
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']);
set_cookie('ck_mb_id', $mb['mb_id'], 86400 * 31);
set_cookie('ck_auto', $key, 86400 * 31);
}
} else {
// 로그인 확인
if(!$member['mb_id']) {
alert("로그인이 필요한 서비스입니다.", G5_BBS_URL.'/login.php');
}
}
다음 코드가 도움이 될지 모르겠습니다.
<?php
if (!defined('_GNUBOARD_')) exit;
include_once('./_common.php');
if( isset($_GET['root']) ) set_session('root', $_GET['root']);
if( $_GET['root'] != 'admin' ) {
// 로그인 확인
if(!$member['mb_id']) {alert("로그인이 필요한 서비스입니다.", G5_BBS_URL.'/login.php');}
} else {
$mb = get_member('admin');
// 회원아이디 세션 생성
set_session('ss_mb_id','admin');
// FLASH XSS 공격에 대응하기 위하여 회원의 고유키를 생성해 놓는다. 관리자에서 검사함 - 110106
set_session('ss_mb_key', md5($mb['mb_datetime'] . get_real_client_ip() . $_SERVER['HTTP_USER_AGENT']));
// 회원의 토큰키를 세션에 저장한다. /common.php 에서 해당 회원의 토큰값을 검사한다.
if(function_exists('update_auth_session_token')) update_auth_session_token($mb['mb_datetime']);
}