채택완료

로그인? 이후 관리자 페이지 접속 에러 문의

2024-06-27 (목) 14:51:21 21,741

사정상 '홈피주소/?root=admin' 이라고 접속하면 최고관리자 admin이라는 id로 접속을 하게 하려고 해봤는데요.

로그인은 됐지만 '관리자 페이지'에 들어가려면 '정상적으로 로그인하여 접근하시기 바랍니다.'라는 메세지가 뜨네요

코드는 index.php에서

Copy
<?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개 / 댓글 3개

채택된 답변
+20 포인트

$mb['mb_datetime'] <== 이 값이 어디에도 없잖아요. 그러니 안되죠

// 회원아이디 세션 생성 <==다음에 넣으세요

$mb=get_member('admin', 'mb_datetime');

그런데 저런 처리가 무슨 의미가 있나요?

아무나 ?root=admin 으로 접속해버리면 관리자가 되어버리는데

전 세계 로봇이나 이상한 프로그램을 돌려서 홈페이지에 로그인 하기 위하여 

무작위로 아이디를 넣어서 접속해오는 로그를 못 보셨나보네요 

저런 것은 홈페이지 금방 사달 납니다

최소한 IP를 체크해서 지정한 IP만 관리자로 로그인 되는 조치가 필요합니다

답변에 대한 댓글 1개

2024-06-27 (목) 16:44:49
균이님 말씀 맞습니다.
지금은 이런저런 상황에 맞는 로그인 페이지를 만들다가
관리자페이지를 접근해야 할 필요가 있는데 이것때문에 로그인 페이지를 따로 두기 뭣해서 이런 생각을 했던거에요.

균이님 답변대로 하니 잘 동작합니다. 감사합니다.

다음 코드가 도움이 될지 모르겠습니다.

Copy
<?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']);
}

답변에 대한 댓글 1개

2024-06-27 (목) 16:38:55
마찮가지로 관리자페이지엔 접근을 할 수 없네요.
답변 감사합니다.

아래의 코드들을 참고를 해보세요..

<?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');
    }
}

답변에 대한 댓글 1개

2024-06-27 (목) 16:40:33
답변감사합니다.

답변을 작성하려면 로그인이 필요합니다.