그룹 접근회원 기능 강화라고나 할까 ...? (대폭 수정) 정보
그누호환 그룹 접근회원 기능 강화라고나 할까 ...? (대폭 수정)첨부파일
본문
그저 간단한 팁입니다.
그룹접근기능을 사용하는데 그룹회원이 아니라도 목록은 볼수 있더군요.
그리고 그점을 수정해 보았지만 또한 어떤때는 그룹회원이 아니라도 목록 정도는 보여줘야 할때도 있고요..
(수정)
제가 전에 올렸던 방법은 큰 문제가 있더군요.
목록보기나 읽기 권한 하나만 손님레벨로 놔 줘도 읽기까지 접근이 가능하더군요.
보안상 매우~ 취약하게 되어있었습니다.. 역시 편법은 편법인가 봅니다. :)
이번에도 편법이지만 그나마 권한을 정확히 적용할수 있어 다행이라고 생각합니다..
이 방법을 적용하게 되면 목록 보기를 손님레벨로 적용해놓을 경우 목록보기만 할수 있습니다.
또한 읽기 레벨만 손님레벨로 적용할 경우 읽기는 가능하지만 목록 보기도 불가능 하게 됩니다.
따라서 읽기와 목록 보기를 모두 하게 할수 있으려면 목록보기와 읽기 레벨을 손님 레벨로 적용해야 됩니다. (이전 방법하고 딴판이죠 ^^ )
gnuboard.php
------------------------------ 원본 소스 ---------------------------------------
<?
# 3.24-1
define("_GNUBOARD_INC_", TRUE);
if (!defined("_GNUBOARD_")) { // 개별 페이지 접근 불가
if ($_GET[bo_table]) { // 이전 버전 호환
include "../config.php";
gotourl("../?doc=bbs/gnuboard.php&bo_table=$_GET[bo_table]&wr_id=$_GET[wr_id]");
} else {
gotourl("./");
}
exit;
}
define("_DOCTYPE_", "STYLE");
if (!$bo_table) {
alert("bo_table 값이 넘어오지 않았습니다.\\n\\n./?doc=bbs/gnuboard.php&bo_table=code 와 같은 방식으로 넘겨 주세요.");
}
if (!is_board($write_table)) {
alert("$bo_table 게시판이 존재하지 않습니다.");
}
// IP 차단
check_intercept_ip();
// wr_id 값이 있으면 글읽기
if ($wr_id) {
if (!$write[wr_id]) {
// 3.35
// 글이 없을 경우 해당 게시판 리스트로 이동
alert("글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.", "./?doc=bbs/gnuboard.php&bo_table=$bo_table");
//alert("글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.");
}
if ($write[wr_comment]) {
alert("코멘트는 바로 보기 할 수 없습니다.");
}
// 로그인된 회원의 권한이 설정된 읽기 권한보다 작다면
if ($member[mb_level] < $board[bo_read_level]) {
if ($member[mb_id]) {
alert("글을 읽을 권한이 없습니다.");
} else {
alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
}
// 3.27 수정
// 비밀글이라면
if ($write[wr_secret]) {
// 3.28
// 회원의 경우 글쓴 회원아이디가 있을 경우 자신의 글일 경우에만 통과
// 비회원에 대해 비밀글이 무용지물이었던 코드를 수정
//if ($write[mb_id] == $member[mb_id]) // 자신의 글이면 통과
if ($write[mb_id] && $write[mb_id] == $member[mb_id]) // 자신의 글이면 통과
;
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 비밀번호를 묻지 않습니다.
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
else if (("$bo_table|$write[wr_num]" != $_SESSION["ss_secret"]) && !$is_admin) {
// 3.30
//gotourl("./?doc=bbs/gbpasswd.php&w=s&wr_id=$wr_id&$qstr&msg=이 게시물은 비밀글입니다.");
gotourl("./?doc=bbs/gbpasswd.php&w=s&wr_id=$wr_id&$qstr&msg=".urlencode("이 게시물은 비밀글입니다."));
exit;
}
session_register("ss_secret");
$ss_secret = $_SESSION["ss_secret"] = "$bo_table|$write[wr_num]";
}
// 그룹접근 가능
if ($group[gr_use_access]) {
if (!$member[mb_id]) {
alert("비회원은 접근할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
if ($is_admin == 'default' || $group[gr_admin] == $member[mb_id]) {
; // 통과
} else {
//$sql = " select count(*) from $cfg[table_group_member] where mb_id = '$member[mb_id]' ";
// 그룹접근 오류 수정 2003-09-01
$sql = " select count(*) from $cfg[table_group_member] where gr_id = '$board[gr_id]' and mb_id = '$member[mb_id]' ";
$row = sql_fetch($sql);
if (!$row[0]) {
alert("접근 권한이 없습니다.\\n\\n궁금하신 사항은 관리자에게 문의바랍니다.");
}
}
}
# $html_title = cut_str($write[wr_subject], 255);
} else {
if ($member[mb_level] < $board[bo_list_level]) {
if ($member[mb_id]) {
alert("목록을 볼 권한이 없습니다.");
} else {
alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
}
if (!$page)
$page = 1;
$html_title = "$group[gr_subject] > $board[bo_subject] $page 페이지";
}
if ($board[bo_include_head]) { @include $board[bo_include_head]; }
if ($board[bo_content_head]) { echo stripslashes($board[bo_content_head]); }
include "./bbs/gblayer.php";
$width = $board[bo_table_width];
if ($width <= 100) {
$width .= '%';
}
// 추천
$is_good = false;
if ($board[bo_use_good]) {
$is_good = true;
$good_href = "./?doc=bbs/gbrecommend.php&$qstr&page=$page&wr_id=$wr_id&recommend=good";
}
// 비추천
$is_nogood = false;
if ($board[bo_use_nogood]) {
$is_nogood = true;
$nogood_href = "./?doc=bbs/gbrecommend.php&$qstr&page=$page&wr_id=$wr_id&recommend=nogood";
}
if ($wr_id) {
include "./bbs/gbview.php";
}
// 전체목록보이기 사용이 '예' 또는 wr_id 값이 없다면 목록을 보임
if ($board[bo_use_listview] || !$wr_id) {
include "./bbs/gblist.php";
}
if ($board[bo_content_tail]) { echo stripslashes($board[bo_content_tail]); }
if ($board[bo_include_tail]) { @include $board[bo_include_tail]; }
?>
------------------------------ 변경된 소스 -------------------------------------
<?
# 3.24-1
define("_GNUBOARD_INC_", TRUE);
if (!defined("_GNUBOARD_")) { // 개별 페이지 접근 불가
if ($_GET[bo_table]) { // 이전 버전 호환
include "../config.php";
gotourl("../?doc=bbs/gnuboard.php&bo_table=$_GET[bo_table]&wr_id=$_GET[wr_id]");
} else {
gotourl("./");
}
exit;
}
define("_DOCTYPE_", "STYLE");
if (!$bo_table) {
alert("bo_table 값이 넘어오지 않았습니다.\\n\\n./?doc=bbs/gnuboard.php&bo_table=code 와 같은 방식으로 넘겨 주세요.");
}
if (!is_board($write_table)) {
alert("$bo_table 게시판이 존재하지 않습니다.");
}
// IP 차단
check_intercept_ip();
// 그룹접근 가능
if ($group[gr_use_access]) {
if (!$member[mb_id]) {
alert("비회원은 접근할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
if ($is_admin == 'default' || $group[gr_admin] == $member[mb_id]) {
; // 통과
} else {
if ($board[bo_list_level] != $cfg[level_guest] && !$wr_id) {
groupblock($member[mb_id]);
}
if ($board[bo_read_level] != $cfg[level_guest] && $wr_id) {
groupblock($member[mb_id]);
}
if ($board[bo_comment_level] != $cfg[level_guest] && $wr_id && $w =='c') {
groupblock($member[mb_id]);
}
}
}
// wr_id 값이 있으면 글읽기
if ($wr_id) {
if (!$write[wr_id]) {
// 3.35
// 글이 없을 경우 해당 게시판 리스트로 이동
alert("글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.", "./?doc=bbs/gnuboard.php&bo_table=$bo_table");
//alert("글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.");
}
if ($write[wr_comment]) {
alert("코멘트는 바로 보기 할 수 없습니다.");
}
// 로그인된 회원의 권한이 설정된 읽기 권한보다 작다면
if ($member[mb_level] < $board[bo_read_level]) {
if ($member[mb_id]) {
alert("글을 읽을 권한이 없습니다.");
} else {
alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
}
// 3.27 수정
// 비밀글이라면
if ($write[wr_secret]) {
// 3.28
// 회원의 경우 글쓴 회원아이디가 있을 경우 자신의 글일 경우에만 통과
// 비회원에 대해 비밀글이 무용지물이었던 코드를 수정
//if ($write[mb_id] == $member[mb_id]) // 자신의 글이면 통과
if ($write[mb_id] && $write[mb_id] == $member[mb_id]) // 자신의 글이면 통과
;
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 비밀번호를 묻지 않습니다.
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
else if (("$bo_table|$write[wr_num]" != $_SESSION["ss_secret"]) && !$is_admin) {
// 3.30
//gotourl("./?doc=bbs/gbpasswd.php&w=s&wr_id=$wr_id&$qstr&msg=이 게시물은 비밀글입니다.");
gotourl("./?doc=bbs/gbpasswd.php&w=s&wr_id=$wr_id&$qstr&msg=".urlencode("이 게시물은 비밀글입니다."));
exit;
}
session_register("ss_secret");
$ss_secret = $_SESSION["ss_secret"] = "$bo_table|$write[wr_num]";
}
# $html_title = cut_str($write[wr_subject], 255);
} else {
if ($member[mb_level] < $board[bo_list_level]) {
if ($member[mb_id]) {
alert("목록을 볼 권한이 없습니다.");
} else {
alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
}
if (!$page)
$page = 1;
$html_title = "$group[gr_subject] > $board[bo_subject] $page 페이지";
}
if ($board[bo_include_head]) { @include $board[bo_include_head]; }
if ($board[bo_content_head]) { echo stripslashes($board[bo_content_head]); }
include "./bbs/gblayer.php";
$width = $board[bo_table_width];
if ($width <= 100) {
$width .= '%';
}
// 추천
$is_good = false;
if ($board[bo_use_good]) {
$is_good = true;
$good_href = "./?doc=bbs/gbrecommend.php&$qstr&page=$page&wr_id=$wr_id&recommend=good";
}
// 비추천
$is_nogood = false;
if ($board[bo_use_nogood]) {
$is_nogood = true;
$nogood_href = "./?doc=bbs/gbrecommend.php&$qstr&page=$page&wr_id=$wr_id&recommend=nogood";
}
if ($wr_id) {
include "./bbs/gbview.php";
}
// 전체목록보이기 사용이 '예' 또는 wr_id 값이 없다면 목록을 보임
if ($board[bo_use_listview] || !$wr_id) {
include "./bbs/gblist.php";
}
if ($board[bo_content_tail]) { echo stripslashes($board[bo_content_tail]); }
if ($board[bo_include_tail]) { @include $board[bo_include_tail]; }
?>
그리고 develop.lib.php 나 gnuboard.lib.php 안에 다음 함수를 추가해 주세요.
function groupblock($member_id)
{
global $cfg, $board;
//$sql = " select count(*) from $cfg[table_group_member] where mb_id = '$member[mb_id]' ";
// 그룹접근 오류 수정 2003-09-01
$sql = " select count(*) from $cfg[table_group_member] where gr_id = '$board[gr_id]' and mb_id = '$member_id' ";
$row = sql_fetch($sql);
if (!$row[0]) {
alert("접근 권한이 없습니다.\\n\\n궁금하신 사항은 관리자에게 문의바랍니다.");
}
}
그런데 gnuboard.php 만 수정하여서는 코멘트 쓰기를 막을수가 없더군요.
그룹에 가입되어있지 않는 회원이 코멘트를 쓸수 있게 됩니다. (읽기가 가능하니..)
그래서 gbupdate.php 에 소스를 추가해 주셔야 합니다.
22줄부터
} else if ($w == 'c') {
if ($member[mb_level] < $board[bo_comment_level]) alert('코멘트를 쓸 권한이 없습니다.');
} else {
이 부분을
} else if ($w == 'c') {
if ($group[gr_use_access] && $board[bo_comment_level] != $cfg[level_guest]) groupblock($member[mb_id]);
if ($member[mb_level] < $board[bo_comment_level]) alert('코멘트를 쓸 권한이 없습니다.');
} else {
이렇게 바꿔주시면 읽기화면에서 코멘트 쓰는 폼이 보이기는 하나 실제로 쓰게되면 접근 권한이 없습니다가 뜨며 이전 화면으로 가게 됩니다.
쓰기 버튼이라던지 폼이 않나오게 하는게 좋겠지만.. 그럴려면 일일이 스킨을 수정해 주거나 그누보드의 소스가 완전히 바껴야 할것 같기에..;;
만약 수정하기 어려우신 분은 파일을 올려놓을테니 덥어 씌워 사용하시기 바랍니다.
그룹접근기능을 사용하는데 그룹회원이 아니라도 목록은 볼수 있더군요.
그리고 그점을 수정해 보았지만 또한 어떤때는 그룹회원이 아니라도 목록 정도는 보여줘야 할때도 있고요..
(수정)
제가 전에 올렸던 방법은 큰 문제가 있더군요.
목록보기나 읽기 권한 하나만 손님레벨로 놔 줘도 읽기까지 접근이 가능하더군요.
보안상 매우~ 취약하게 되어있었습니다.. 역시 편법은 편법인가 봅니다. :)
이번에도 편법이지만 그나마 권한을 정확히 적용할수 있어 다행이라고 생각합니다..
이 방법을 적용하게 되면 목록 보기를 손님레벨로 적용해놓을 경우 목록보기만 할수 있습니다.
또한 읽기 레벨만 손님레벨로 적용할 경우 읽기는 가능하지만 목록 보기도 불가능 하게 됩니다.
따라서 읽기와 목록 보기를 모두 하게 할수 있으려면 목록보기와 읽기 레벨을 손님 레벨로 적용해야 됩니다. (이전 방법하고 딴판이죠 ^^ )
gnuboard.php
------------------------------ 원본 소스 ---------------------------------------
<?
# 3.24-1
define("_GNUBOARD_INC_", TRUE);
if (!defined("_GNUBOARD_")) { // 개별 페이지 접근 불가
if ($_GET[bo_table]) { // 이전 버전 호환
include "../config.php";
gotourl("../?doc=bbs/gnuboard.php&bo_table=$_GET[bo_table]&wr_id=$_GET[wr_id]");
} else {
gotourl("./");
}
exit;
}
define("_DOCTYPE_", "STYLE");
if (!$bo_table) {
alert("bo_table 값이 넘어오지 않았습니다.\\n\\n./?doc=bbs/gnuboard.php&bo_table=code 와 같은 방식으로 넘겨 주세요.");
}
if (!is_board($write_table)) {
alert("$bo_table 게시판이 존재하지 않습니다.");
}
// IP 차단
check_intercept_ip();
// wr_id 값이 있으면 글읽기
if ($wr_id) {
if (!$write[wr_id]) {
// 3.35
// 글이 없을 경우 해당 게시판 리스트로 이동
alert("글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.", "./?doc=bbs/gnuboard.php&bo_table=$bo_table");
//alert("글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.");
}
if ($write[wr_comment]) {
alert("코멘트는 바로 보기 할 수 없습니다.");
}
// 로그인된 회원의 권한이 설정된 읽기 권한보다 작다면
if ($member[mb_level] < $board[bo_read_level]) {
if ($member[mb_id]) {
alert("글을 읽을 권한이 없습니다.");
} else {
alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
}
// 3.27 수정
// 비밀글이라면
if ($write[wr_secret]) {
// 3.28
// 회원의 경우 글쓴 회원아이디가 있을 경우 자신의 글일 경우에만 통과
// 비회원에 대해 비밀글이 무용지물이었던 코드를 수정
//if ($write[mb_id] == $member[mb_id]) // 자신의 글이면 통과
if ($write[mb_id] && $write[mb_id] == $member[mb_id]) // 자신의 글이면 통과
;
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 비밀번호를 묻지 않습니다.
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
else if (("$bo_table|$write[wr_num]" != $_SESSION["ss_secret"]) && !$is_admin) {
// 3.30
//gotourl("./?doc=bbs/gbpasswd.php&w=s&wr_id=$wr_id&$qstr&msg=이 게시물은 비밀글입니다.");
gotourl("./?doc=bbs/gbpasswd.php&w=s&wr_id=$wr_id&$qstr&msg=".urlencode("이 게시물은 비밀글입니다."));
exit;
}
session_register("ss_secret");
$ss_secret = $_SESSION["ss_secret"] = "$bo_table|$write[wr_num]";
}
// 그룹접근 가능
if ($group[gr_use_access]) {
if (!$member[mb_id]) {
alert("비회원은 접근할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
if ($is_admin == 'default' || $group[gr_admin] == $member[mb_id]) {
; // 통과
} else {
//$sql = " select count(*) from $cfg[table_group_member] where mb_id = '$member[mb_id]' ";
// 그룹접근 오류 수정 2003-09-01
$sql = " select count(*) from $cfg[table_group_member] where gr_id = '$board[gr_id]' and mb_id = '$member[mb_id]' ";
$row = sql_fetch($sql);
if (!$row[0]) {
alert("접근 권한이 없습니다.\\n\\n궁금하신 사항은 관리자에게 문의바랍니다.");
}
}
}
# $html_title = cut_str($write[wr_subject], 255);
} else {
if ($member[mb_level] < $board[bo_list_level]) {
if ($member[mb_id]) {
alert("목록을 볼 권한이 없습니다.");
} else {
alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
}
if (!$page)
$page = 1;
$html_title = "$group[gr_subject] > $board[bo_subject] $page 페이지";
}
if ($board[bo_include_head]) { @include $board[bo_include_head]; }
if ($board[bo_content_head]) { echo stripslashes($board[bo_content_head]); }
include "./bbs/gblayer.php";
$width = $board[bo_table_width];
if ($width <= 100) {
$width .= '%';
}
// 추천
$is_good = false;
if ($board[bo_use_good]) {
$is_good = true;
$good_href = "./?doc=bbs/gbrecommend.php&$qstr&page=$page&wr_id=$wr_id&recommend=good";
}
// 비추천
$is_nogood = false;
if ($board[bo_use_nogood]) {
$is_nogood = true;
$nogood_href = "./?doc=bbs/gbrecommend.php&$qstr&page=$page&wr_id=$wr_id&recommend=nogood";
}
if ($wr_id) {
include "./bbs/gbview.php";
}
// 전체목록보이기 사용이 '예' 또는 wr_id 값이 없다면 목록을 보임
if ($board[bo_use_listview] || !$wr_id) {
include "./bbs/gblist.php";
}
if ($board[bo_content_tail]) { echo stripslashes($board[bo_content_tail]); }
if ($board[bo_include_tail]) { @include $board[bo_include_tail]; }
?>
------------------------------ 변경된 소스 -------------------------------------
<?
# 3.24-1
define("_GNUBOARD_INC_", TRUE);
if (!defined("_GNUBOARD_")) { // 개별 페이지 접근 불가
if ($_GET[bo_table]) { // 이전 버전 호환
include "../config.php";
gotourl("../?doc=bbs/gnuboard.php&bo_table=$_GET[bo_table]&wr_id=$_GET[wr_id]");
} else {
gotourl("./");
}
exit;
}
define("_DOCTYPE_", "STYLE");
if (!$bo_table) {
alert("bo_table 값이 넘어오지 않았습니다.\\n\\n./?doc=bbs/gnuboard.php&bo_table=code 와 같은 방식으로 넘겨 주세요.");
}
if (!is_board($write_table)) {
alert("$bo_table 게시판이 존재하지 않습니다.");
}
// IP 차단
check_intercept_ip();
// 그룹접근 가능
if ($group[gr_use_access]) {
if (!$member[mb_id]) {
alert("비회원은 접근할 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
if ($is_admin == 'default' || $group[gr_admin] == $member[mb_id]) {
; // 통과
} else {
if ($board[bo_list_level] != $cfg[level_guest] && !$wr_id) {
groupblock($member[mb_id]);
}
if ($board[bo_read_level] != $cfg[level_guest] && $wr_id) {
groupblock($member[mb_id]);
}
if ($board[bo_comment_level] != $cfg[level_guest] && $wr_id && $w =='c') {
groupblock($member[mb_id]);
}
}
}
// wr_id 값이 있으면 글읽기
if ($wr_id) {
if (!$write[wr_id]) {
// 3.35
// 글이 없을 경우 해당 게시판 리스트로 이동
alert("글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.", "./?doc=bbs/gnuboard.php&bo_table=$bo_table");
//alert("글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.");
}
if ($write[wr_comment]) {
alert("코멘트는 바로 보기 할 수 없습니다.");
}
// 로그인된 회원의 권한이 설정된 읽기 권한보다 작다면
if ($member[mb_level] < $board[bo_read_level]) {
if ($member[mb_id]) {
alert("글을 읽을 권한이 없습니다.");
} else {
alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
}
// 3.27 수정
// 비밀글이라면
if ($write[wr_secret]) {
// 3.28
// 회원의 경우 글쓴 회원아이디가 있을 경우 자신의 글일 경우에만 통과
// 비회원에 대해 비밀글이 무용지물이었던 코드를 수정
//if ($write[mb_id] == $member[mb_id]) // 자신의 글이면 통과
if ($write[mb_id] && $write[mb_id] == $member[mb_id]) // 자신의 글이면 통과
;
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 비밀번호를 묻지 않습니다.
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
else if (("$bo_table|$write[wr_num]" != $_SESSION["ss_secret"]) && !$is_admin) {
// 3.30
//gotourl("./?doc=bbs/gbpasswd.php&w=s&wr_id=$wr_id&$qstr&msg=이 게시물은 비밀글입니다.");
gotourl("./?doc=bbs/gbpasswd.php&w=s&wr_id=$wr_id&$qstr&msg=".urlencode("이 게시물은 비밀글입니다."));
exit;
}
session_register("ss_secret");
$ss_secret = $_SESSION["ss_secret"] = "$bo_table|$write[wr_num]";
}
# $html_title = cut_str($write[wr_subject], 255);
} else {
if ($member[mb_level] < $board[bo_list_level]) {
if ($member[mb_id]) {
alert("목록을 볼 권한이 없습니다.");
} else {
alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./?doc=bbs/mblogin.php&wr_id=$wr_id&$qstr&url=".urlencode("./?doc=bbs/gnuboard.php&bo_table=$bo_table&wr_id=$wr_id"));
}
}
if (!$page)
$page = 1;
$html_title = "$group[gr_subject] > $board[bo_subject] $page 페이지";
}
if ($board[bo_include_head]) { @include $board[bo_include_head]; }
if ($board[bo_content_head]) { echo stripslashes($board[bo_content_head]); }
include "./bbs/gblayer.php";
$width = $board[bo_table_width];
if ($width <= 100) {
$width .= '%';
}
// 추천
$is_good = false;
if ($board[bo_use_good]) {
$is_good = true;
$good_href = "./?doc=bbs/gbrecommend.php&$qstr&page=$page&wr_id=$wr_id&recommend=good";
}
// 비추천
$is_nogood = false;
if ($board[bo_use_nogood]) {
$is_nogood = true;
$nogood_href = "./?doc=bbs/gbrecommend.php&$qstr&page=$page&wr_id=$wr_id&recommend=nogood";
}
if ($wr_id) {
include "./bbs/gbview.php";
}
// 전체목록보이기 사용이 '예' 또는 wr_id 값이 없다면 목록을 보임
if ($board[bo_use_listview] || !$wr_id) {
include "./bbs/gblist.php";
}
if ($board[bo_content_tail]) { echo stripslashes($board[bo_content_tail]); }
if ($board[bo_include_tail]) { @include $board[bo_include_tail]; }
?>
그리고 develop.lib.php 나 gnuboard.lib.php 안에 다음 함수를 추가해 주세요.
function groupblock($member_id)
{
global $cfg, $board;
//$sql = " select count(*) from $cfg[table_group_member] where mb_id = '$member[mb_id]' ";
// 그룹접근 오류 수정 2003-09-01
$sql = " select count(*) from $cfg[table_group_member] where gr_id = '$board[gr_id]' and mb_id = '$member_id' ";
$row = sql_fetch($sql);
if (!$row[0]) {
alert("접근 권한이 없습니다.\\n\\n궁금하신 사항은 관리자에게 문의바랍니다.");
}
}
그런데 gnuboard.php 만 수정하여서는 코멘트 쓰기를 막을수가 없더군요.
그룹에 가입되어있지 않는 회원이 코멘트를 쓸수 있게 됩니다. (읽기가 가능하니..)
그래서 gbupdate.php 에 소스를 추가해 주셔야 합니다.
22줄부터
} else if ($w == 'c') {
if ($member[mb_level] < $board[bo_comment_level]) alert('코멘트를 쓸 권한이 없습니다.');
} else {
이 부분을
} else if ($w == 'c') {
if ($group[gr_use_access] && $board[bo_comment_level] != $cfg[level_guest]) groupblock($member[mb_id]);
if ($member[mb_level] < $board[bo_comment_level]) alert('코멘트를 쓸 권한이 없습니다.');
} else {
이렇게 바꿔주시면 읽기화면에서 코멘트 쓰는 폼이 보이기는 하나 실제로 쓰게되면 접근 권한이 없습니다가 뜨며 이전 화면으로 가게 됩니다.
쓰기 버튼이라던지 폼이 않나오게 하는게 좋겠지만.. 그럴려면 일일이 스킨을 수정해 주거나 그누보드의 소스가 완전히 바껴야 할것 같기에..;;
만약 수정하기 어려우신 분은 파일을 올려놓을테니 덥어 씌워 사용하시기 바랍니다.
추천
0
0
댓글 전체