관리자 페이지에서 게시판 사용하기 (3분세팅 관리자 게시판) > 그누보드5 팁자료실

그누보드5 팁자료실

관리자 페이지에서 게시판 사용하기 (3분세팅 관리자 게시판) 정보

관리자 페이지에서 게시판 사용하기 (3분세팅 관리자 게시판)

본문

제가 관리자 페이지에서 그누보드 게시판을 사용하는 방법인데 이렇게 하면 3분만에 간편하게 관리자페이지에 게시판을 세팅할 수 있습니다.

 

1. extend 디렉토리에 새 파일 생성
그누보드 ROOT 디렉토리에 있는 extend 디렉토리에 새 php 파일을 생성해 아래 코드를 저장합니다.

관리자 게시판으로 사용할 게시판 아이디와, 관리자 게시판에서 사용할 메뉴 ID를 정의하고 필요한 라이브러리 코드, 상수 등을 가져오거나 정의합니다.

 


<?php
$adminBoardArr = array(
  '300900' => 'free'
  // key : 사용할 게시판 메뉴아이디
  // value : 사용할 게시판 아이디($bo_table)
  // 사용할 게시판이 더 있으면 이 부분에 추가해서 사용하시면 됩니다.
);
$isBoard = basename($_SERVER['PHP_SELF']) !== 'board_form.php' && basename($_SERVER['PHP_SELF']) !== 'board_copy.php' && basename($_SERVER['PHP_SELF']) !== 'board_copy_update.php';
if ($isBoard && isset($bo_table) && !empty($bo_table)) {
  $sub_menu = array_search($bo_table, $adminBoardArr);
  $isAdmBoard = $sub_menu !== false;
  if ($isAdmBoard) {
    define('ADMIN_BBS', true);
    include_once(G5_PATH.'/extend/sms5.extend.php'); // 2020.12.03 추가 - 상수 (G5_SMS5_ADMIN_URL) 오류 해결
    include_once(G5_ADMIN_PATH.'/_common.php');
    // 7월 21일 추가. 아래 2줄을 삽입하면 [3번] 과정을 생략할 수 있습니다.
    // 게시판 스킨 설정 페이지 '상단 파일 경로', '하단 파일 경로' 무시, 관리자 헤더 푸터 강제 적용
    $board['bo_include_head'] = '../adm/admin.head.php';
    $board['bo_include_tail'] = '../adm/admin.tail.php';
  }
}
?>

 

1888507261_1595312397.5653.png

 


2. 관리자메뉴 파일에 게시판 연결
관리자메뉴 파일을 수정해 게시판을 연결합니다.

 


array('300900', '관리자 자유게시판', G5_BBS_URL.'/board.php?bo_table=free', ''),

 

1888507261_1591496888.0994.png

 


3. 게시판 설정 변경 (생략가능)

※ 1번 과정에서 7월 21일 추가 코드의 내용을 반영하셨다면 아래 과정은 생략하셔도 됩니다.

7월 21일 추가 내용 적용않고 진행하려면 아래의 내용을 확인해주세요.

 

게시판 설정 페이지에서 상단 하단 인클루드 파일을 관리자 헤더와 푸터로 교체합니다.

 

상단 파일 경로 : ../adm/admin.head.php

하단 파일 경로 : ../adm/admin.tail.php

 

1888507261_1591496745.1917.jpg


이제 관리자 페이지에서 게시판이 적용된 모습은 볼 수 있습니다만, 토큰 관련 문제로 글쓰기가 작동을 안합니다. 이 문제를 해결하기 위해서 admin.tail.php 에서 불러오는 admin.js 파일을 관리자 게시판이 아닐 때에만 선택적으로 가져오도록 코드를 수정합니다.

4. adm/admin.tail.php 파일 수정
adm/admin.tail.php 파일을 열어 admin.js 파일을 연결하고 있는 부분을 찾아 수정.

 


<script src="<?php echo G5_ADMIN_URL ?>/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>

 

이 부분을 1번과정인 extend 디렉토리에 새로 생성한 파일에서 사전에 미리 정의한 상수(ADMIN_BBS)를 이용해 관리자 게시판이 아닐 때에만 선택적으로 가져올 수 있도록 if 문으로 감쌉니다.

 


<?php if (!defined('ADMIN_BBS')) { ?>
<script src="<?php echo G5_ADMIN_URL ?>/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>
<?php } ?>

 

1888507261_1591497044.1623.png


5. 끝

1888507261_1591498015.31.png
1888507261_1591498023.1089.png

1888507261_1591498033.5825.png

 

저는 이렇게 문제 없이 잘 사용하고 있는데, head.sub.php 파일과 tail.sub.php 파일을 변경해서 사용하시거나 하는 경우에는 잘 맞지 않을수도 있습니다. 퍼블리셔로 제이쿼리만 다루던 실력으로 야금야금 PHP를 만져나가고 있는거라 다른 어떤 문제가 발생할지 모르니 위 내용을 보시고 잘 맞는 경우에 사용해주세요.


*******************************
2020년 6월 23일 추가
*******************************


DHTML에디터를 사용할 때, 본문 내용에 HTML 태그가 삽입되는 문제로 admin.lib.php 파일의 XSS 공격 방어 함수에 걸리게 됩니다. 

"요청 쿼리에 잘못된 스크립트문장이 있습니다.
XSS공격일수도 있습니다."

라는 경고창이 뜨면서 글 등록이 안될 경우에 adm/admin.lib.php 파일에서 관리자용 게시판일 때에만 HTML 관련 패턴 검사를 PASS 하도록 설정을 변경합니다.

보안관련 설정을 변경하므로 주의해서 사용하시기 바랍니다.

adm/admin.lib.php 에서 

 


function admin_check_xss_params($params){
 
    if( ! $params ) return;
 
    foreach( $params as $key=>$value ){
 
        if ( empty($value) ) continue;
 
        if( is_array($value) ){
            admin_check_xss_params($value);
        } else if ( (preg_match('/<\s?[^\>]*\/?\s?>/i', $value) && (preg_match('/script.*?\/script/ius', $value) || preg_match('/[onload|onerror]=.*/ius', $value))) || preg_match('/^(?=.*token\()(?=.*xmlhttprequest\()(?=.*send\().*$/im', $value) || (preg_match('/[onload|onerror|focus]=.*/ius', $value) && preg_match('/(eval|expression|exec|prompt)(\s*)\((.*)\)/ius', $value)) ){
            alert('요청 쿼리에 잘못된 스크립트문장이 있습니다.\\nXSS 공격일수도 있습니다.', G5_URL);
            die();
        }
    }
 
    return;
}


↑↑ 위의 내용을


function admin_check_xss_params($params){
 
    if( ! $params ) return;
 
    foreach( $params as $key=>$value ){
 
        if ( empty($value) ) continue;
 
        if( is_array($value) ){
            admin_check_xss_params($value);
        } else if ( ((preg_match('/<\s?[^\>]*\/?\s?>/i', $value) && (preg_match('/script.*?\/script/ius', $value) || preg_match('/[onload|onerror]=.*/ius', $value))) && !defined('ADMIN_BBS')) || preg_match('/^(?=.*token\()(?=.*xmlhttprequest\()(?=.*send\().*$/im', $value) || (preg_match('/[onload|onerror|focus]=.*/ius', $value) && preg_match('/(eval|expression|exec|prompt)(\s*)\((.*)\)/ius', $value)) ){
            alert('요청 쿼리에 잘못된 스크립트문장이 있습니다.\\nXSS 공격일수도 있습니다.', G5_URL);
            die();
        }
    }
 
    return;
}

↑↑ 이렇게 변경해줍니다. 


*******************************
2020년 7월 21일 추가
*******************************


게시판 설정을 굳이 하지 않아도 되도록 코드 추가.

1번 과정에서 내용 확인


*******************************
2020년 12월 03일 추가
*******************************

 

1번 extend 소스코드에 G5_SMS5_ADMIN_URL 상수 인식 안되는 오류를 해결하기 위해
adm/_common.php 파일을 읽어오기 전 라인에 관련 상수를 읽어오도록 sms5.extend.php 를 불러오는 코드 추가. 본문 전체 코드에 반영 함.


include_once(G5_PATH.'/extend/sms5.extend.php'); // 2020.12.03 추가 - 상수 (G5_SMS5_ADMIN_URL) 

 

*******************************
2021년 8월 16일 추가
*******************************

 

일부 관리자 페이지에서 bo_table 파라메터를 사용하는 경우, extend 에 적용한 소스코드와 충돌 확인.

충돌 방지를 위해 예외처리 추가


$isBoard = basename($_SERVER['PHP_SELF']) !== 'board_form.php' && basename($_SERVER['PHP_SELF']) !== 'board_copy.php' && basename($_SERVER['PHP_SELF']) !== 'board_copy_update.php';

 

*******************************
2022년 7월 26일 추가
*******************************

※ config.php 설정에서 모바일을 사용하는 설정일 경우에만 참고.

-> 그누보드 config 설정에서 모바일을 사용하도록 설정되어 있을 경우, ?device=mobile 파라메터를 가지고 접근시 사용자 화면으로 출력되는 문제가 있음. 게시판 접근권한 설정에서 관리자만 접근하도록 막아도 되지만 아래의 추가 작업을 수행하면 어떤 환경, 파라메터에서도 관리자 페이지로 접근됨.

 

config.php 에서 상수 G5_SET_DEVICE 의 설정을 mobile 또는 both로 사용할 경우

define('G5_SET_DEVICE', 'both');

URL?device=mobile 로 접속해도 정상적으로 관리자 화면에서 게시판이 보여질 수 있도록 2개의 파일을 추가로 수정해야 합니다.
  1. bbs/board_head.php

// 게시판 관리의 상단 내용
if (G5_IS_MOBILE) {
    // 모바일의 경우 설정을 따르지 않는다.
    include_once(G5_BBS_PATH.'/_head.php');
    echo html_purifier(stripslashes($board['bo_mobile_content_head']));
} else {
    if(is_include_path_check($board['bo_include_head'])) {  //파일경로 체크
        @include ($board['bo_include_head']);
    } else {    //파일경로가 올바르지 않으면 기본파일을 가져옴
        include_once(G5_BBS_PATH.'/_head.php');
    }
    echo html_purifier(stripslashes($board['bo_content_head']));
}

위의 내용을 아래의 내용으로 변경


// 게시판 관리의 상단 내용
if (G5_IS_MOBILE) {
    if(is_include_path_check($board['bo_include_head'])) {  //파일경로 체크
        @include ($board['bo_include_head']);
    } else {    //파일경로가 올바르지 않으면 기본파일을 가져옴
        include_once(G5_BBS_PATH.'/_head.php');
    }
    echo html_purifier(stripslashes($board['bo_mobile_content_head']));
} else {
    if(is_include_path_check($board['bo_include_head'])) {  //파일경로 체크
        @include ($board['bo_include_head']);
    } else {    //파일경로가 올바르지 않으면 기본파일을 가져옴
        include_once(G5_BBS_PATH.'/_head.php');
    }
    echo html_purifier(stripslashes($board['bo_content_head']));
}

 

2. bbs/board_head.php


// 게시판 관리의 하단 파일 경로
if (G5_IS_MOBILE) {
    echo html_purifier(stripslashes($board['bo_mobile_content_tail']));
    // 모바일의 경우 설정을 따르지 않는다.
    include_once(G5_BBS_PATH.'/_tail.php');
} else {
    echo html_purifier(stripslashes($board['bo_content_tail']));
    if(is_include_path_check($board['bo_include_tail'])) {  //파일경로 체크
        @include ($board['bo_include_tail']);
    } else {    //파일경로가 올바르지 않으면 기본파일을 가져옴
        include_once(G5_BBS_PATH.'/_tail.php');
    }
}

위의 내용을 아래의 내용으로 변경


// 게시판 관리의 하단 파일 경로
if (G5_IS_MOBILE) {
    echo html_purifier(stripslashes($board['bo_mobile_content_tail']));
    if(is_include_path_check($board['bo_include_tail'])) {  //파일경로 체크
        @include ($board['bo_include_tail']);
    } else {    //파일경로가 올바르지 않으면 기본파일을 가져옴
        include_once(G5_BBS_PATH.'/_tail.php');
    }
} else {
    echo html_purifier(stripslashes($board['bo_content_tail']));
    if(is_include_path_check($board['bo_include_tail'])) {  //파일경로 체크
        @include ($board['bo_include_tail']);
    } else {    //파일경로가 올바르지 않으면 기본파일을 가져옴
        include_once(G5_BBS_PATH.'/_tail.php');
    }
}

 

요약

1. extend 디렉토리에 파일 생성


<?php
$adminBoardArr = array(
  '300900' => 'free'
  // key : 사용할 게시판 메뉴아이디
  // value : 사용할 게시판 아이디($bo_table)
);
$isBoard = basename($_SERVER['PHP_SELF']) !== 'board_form.php' && basename($_SERVER['PHP_SELF']) !== 'board_copy.php' && basename($_SERVER['PHP_SELF']) !== 'board_copy_update.php';
if ($isBoard && isset($bo_table) && !empty($bo_table)) {
  $sub_menu = array_search($bo_table, $adminBoardArr);
  $isAdmBoard = $sub_menu !== false;
  if ($isAdmBoard) {
    define('ADMIN_BBS', true);
    include_once(G5_PATH.'/extend/sms5.extend.php');
    include_once(G5_ADMIN_PATH.'/_common.php');
    // 7월 21일 추가. 아래 2줄을 삽입하면 [3번] 과정을 생략할 수 있습니다.
    // 게시판 스킨 설정 페이지 '상단 파일 경로', '하단 파일 경로' 무시, 관리자 헤더 푸터 강제 적용
    $board['bo_include_head'] = '../adm/admin.head.php';
    $board['bo_include_tail'] = '../adm/admin.tail.php';
  }
}
?>

 

2. 메뉴 파일 수정 (adm/admin.menu300.php)


array('300900', '관리자 자유게시판', G5_BBS_URL.'/board.php?bo_table=free', ''),


3. 게시판 설정 수정 (7월 21일 추가 코드 적용시 생략가능)
상단 파일 경로 : ../adm/admin.head.php

하단 파일 경로 : ../adm/admin.tail.php

 

4. admin.tail.php 파일 수정

<script src="<?php echo G5_ADMIN_URL ?>/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>

위의 내용을 찾아 아래의 내용으로 변경

<?php if (!defined('ADMIN_BBS')) { ?>
<script src="<?php echo G5_ADMIN_URL ?>/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>
<?php } ?>

 

작성자 홈페이지 : https://moksunung.com

추천
15

댓글 22개

정말 간단하게 작동하네요 ㅎㅎ

근데 글을 작성할때 에러가 나는데 돌아가서 새로고침하면 작성은 되어있습니다.
 어디를 수정해야할까요? 버젼은 5.4.1.4 입니다
상수인식을 하지 못하기 때문에 나타나는 문구인데요

include_once(G5_ADMIN_PATH.'/_common.php');

_common.php 파일을 읽어오는 부분 바로 위에 sms5.extend.php 를 불러들이면 해결됩니다!

include_once(G5_ADMIN_PATH.'/_common.php');

이 부분을

include_once(G5_PATH.'/extend/sms5.extend.php');
include_once(G5_ADMIN_PATH.'/_common.php');

이렇게 변경해주세요! 본문에 반영하겠습니다^^ 감사합니다.
진짜 포인트주고 이것저것 사서 테스트한것보다 훨~씬 간단하고 오류없이 잘 작동하네요ㅠ 정말정말 감사합니다. 복받으세용!!

좋은 팁 감사합니다.

 

적용 중 The requested URL 폴더위치/sst= was not found on this server.

이런 에러가 발생되는분은 환경설정에서 짧은주소 설정을 사용안함으로 설정하셔야 에러가 발생되지 않습니다.

전체 2,412 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT