비밀글인데 비회원 권한으로도 그냥 읽혀집니다.. 정보
비밀글인데 비회원 권한으로도 그냥 읽혀집니다..
관련링크
본문
비밀글인데 비회원 권한으로도 그냥 읽혀집니다
게시판관리에서 읽기 권한을 1로 해놨긴했는데...
아무리 그래도 ㅠㅠ 일반글도 아닌 비밀글인데
그냥 읽혀지니 좀 그렇네요...
비밀글은 권한에 관계없이 비밀번호를 알아야 읽을 수 있어야 하는거 아닌가요?ㅠㅠ
비밀글을 체크할 경우 게시글 작성시 비밀글에 체크하면 비밀번호 4자리를 따로 입력하도록
유도하고 최고관리자 권한과 비밀글 작성자 이외의 사람은 비밀글을 읽을때 비밀번호를 입력하도록 했으면 좋겠는데
어떻게 수정할 방법이 없을까요...
링크 #1 은 비밀글입니다...로그인하지 않고도 바로 글이 보입니다..
질문게시판에서 검색을 해봤는데 똑같은 의문점을 제기하고 같은 해결을 원하시는 분들이 더러있었는데 답변이 하나도 없네요...
댓글 전체
혹시 쿠키문제 아니신지요?
비회원이 글을 작성하고 나면, 쿠키가 저장되어있어서 같은 컴퓨터는 비밀번호를 물어보지 않습니다.
만약 그 문제라면 쿠키삭제하시거나, 다른컴퓨터로 확인해보세요.
비회원이 글을 작성하고 나면, 쿠키가 저장되어있어서 같은 컴퓨터는 비밀번호를 물어보지 않습니다.
만약 그 문제라면 쿠키삭제하시거나, 다른컴퓨터로 확인해보세요.
쿠키문제는 아닙니다..
공수래님께서도 위 링크를 클릭해서 들어가면 비밀글인데도 그냥읽어지실껍니다...
배추베이직게시판스킨의 문제도 아니구요,...
그누보드 어떤 파일이 게시판의 비밀글을 관장하고있나요?
공수래님께서도 위 링크를 클릭해서 들어가면 비밀글인데도 그냥읽어지실껍니다...
배추베이직게시판스킨의 문제도 아니구요,...
그누보드 어떤 파일이 게시판의 비밀글을 관장하고있나요?
혹시 bbs/view.php 에 추가한 이소스에 문제가 있나요??
// 비회원은 글 보기 x회까지만 2009.11.02
if(!$is_member) {
if($_SESSION[visitor_view] >= 10) goto_login();
else $_SESSION[visitor_view]++;
}
/*
//비회원은 사진노출X 내용은 500자만노출 2010.01.14
if (!$is_member) {
$view[content] = conv_content($view[wr_content], $html);
//html 로 작성된 내용에 포함된 img 태그 제거
$view[content] = preg_replace("/(\<img )([^\>]*)(\>)/i", "", $view[content]);
//일반태그 제거후 500자로 잘름
$view[content] = cut_str(trim(strip_tags($view[content])),500,"…");
$view[content].= "<br><hr><font color=\"red\"><b>※ 비회원은<br>원본글에 첨부된 사진 및 내용은 500자까지만 보실 수 있습니다.<br>로그인 하시면 원본글 및 첨부파일, 이미지를 보실수 있습니다.</b></font></span>";
//비회원인경우 첨부파일 없엠
$view[file] = array();
} else {
$view[content] = conv_content($view[wr_content], $html);
if (strstr($sfl, "content"))
$view[content] = search_font($stx, $view[content]);
$view[content] = preg_replace("/(\<img )([^\>]*)(\>)/i", "\\1 name='target_resize_image[]' onclick='image_window(this)' style='cursor:pointer;' \\2 \\3", $view[content]);
}
*/
// 비회원은 글 보기 x회까지만 2009.11.02
if(!$is_member) {
if($_SESSION[visitor_view] >= 10) goto_login();
else $_SESSION[visitor_view]++;
}
/*
//비회원은 사진노출X 내용은 500자만노출 2010.01.14
if (!$is_member) {
$view[content] = conv_content($view[wr_content], $html);
//html 로 작성된 내용에 포함된 img 태그 제거
$view[content] = preg_replace("/(\<img )([^\>]*)(\>)/i", "", $view[content]);
//일반태그 제거후 500자로 잘름
$view[content] = cut_str(trim(strip_tags($view[content])),500,"…");
$view[content].= "<br><hr><font color=\"red\"><b>※ 비회원은<br>원본글에 첨부된 사진 및 내용은 500자까지만 보실 수 있습니다.<br>로그인 하시면 원본글 및 첨부파일, 이미지를 보실수 있습니다.</b></font></span>";
//비회원인경우 첨부파일 없엠
$view[file] = array();
} else {
$view[content] = conv_content($view[wr_content], $html);
if (strstr($sfl, "content"))
$view[content] = search_font($stx, $view[content]);
$view[content] = preg_replace("/(\<img )([^\>]*)(\>)/i", "\\1 name='target_resize_image[]' onclick='image_window(this)' style='cursor:pointer;' \\2 \\3", $view[content]);
}
*/
비밀글 처리는 /bbs/board.php 의 97번째 줄에서 관장하고 있습니다.
view.php는 그보다 밑에서 호출하므로 상관없을꺼 같아요.
// 비밀글이라면
if (strstr($write[wr_option], "secret"))
{
// 회원이 비밀글을 올리고 관리자가 답변글을 올렸을 경우
// 회원이 관리자가 올린 답변글을 바로 볼 수 없던 오류를 수정
$is_owner = false;
if ($write[wr_reply] && $member[mb_id])
{
$sql = " select mb_id from $write_table
where wr_num = '$write[wr_num]'
and wr_reply = ''
and wr_is_comment = '0' ";
$row = sql_fetch($sql);
if ($row[mb_id] == $member[mb_id])
$is_owner = true;
}
$ss_name = "ss_secret_{$bo_table}_$write[wr_num]";
if (!$is_owner)
{
//$ss_name = "ss_secret_{$bo_table}_{$wr_id}";
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 패스워드를 묻지 않습니다.
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
//if ("$bo_table|$write[wr_num]" != get_session("ss_secret"))
if (!get_session($ss_name))
goto_url("./password.php?w=s&bo_table=$bo_table&wr_id=$wr_id{$qstr}");
}
set_session($ss_name, TRUE);
}
맞게 되있으신가요? 스킨에서 무시하도록 처리되있는것을 확인해봐야할것 같습니다.
view.php는 그보다 밑에서 호출하므로 상관없을꺼 같아요.
// 비밀글이라면
if (strstr($write[wr_option], "secret"))
{
// 회원이 비밀글을 올리고 관리자가 답변글을 올렸을 경우
// 회원이 관리자가 올린 답변글을 바로 볼 수 없던 오류를 수정
$is_owner = false;
if ($write[wr_reply] && $member[mb_id])
{
$sql = " select mb_id from $write_table
where wr_num = '$write[wr_num]'
and wr_reply = ''
and wr_is_comment = '0' ";
$row = sql_fetch($sql);
if ($row[mb_id] == $member[mb_id])
$is_owner = true;
}
$ss_name = "ss_secret_{$bo_table}_$write[wr_num]";
if (!$is_owner)
{
//$ss_name = "ss_secret_{$bo_table}_{$wr_id}";
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 패스워드를 묻지 않습니다.
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
//if ("$bo_table|$write[wr_num]" != get_session("ss_secret"))
if (!get_session($ss_name))
goto_url("./password.php?w=s&bo_table=$bo_table&wr_id=$wr_id{$qstr}");
}
set_session($ss_name, TRUE);
}
맞게 되있으신가요? 스킨에서 무시하도록 처리되있는것을 확인해봐야할것 같습니다.
/bbs/board.php 의 해당 부분 내용은 아래와같습니다..
// 로그인된 회원의 권한이 설정된 읽기 권한보다 작다면
if ($member[mb_level] < $board[bo_read_level])
{
if ($member[mb_id])
//alert("글을 읽을 권한이 없습니다.");
alert("글을 읽을 권한이 없습니다.", $g4[path]);
else
//alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id{$qstr}&url=".urlencode("./board.php?bo_table=$bo_table&wr_id=$wr_id"));
alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오."); //미니홈피사용시 메인으로 이동 방지 2009.10.25
}
// 자신의 글이거나 관리자라면 통과
//if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin)
if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin || ($sca == $member[mb_id]) || $member[mb_id] == $write[wr_9]) //미니필 ; write[wr_9]에 대한 부분이 지정 비밀글에 쓰인 것 2009.11.03
;
else
{
// 비밀글이라면
if (strstr($write[wr_option], "secret"))
{
// 회원이 비밀글을 올리고 관리자가 답변글을 올렸을 경우
// 회원이 관리자가 올린 답변글을 바로 볼 수 없던 오류를 수정
$is_owner = false;
if ($write[wr_reply] && $member[mb_id])
{
$sql = " select mb_id from $write_table
where wr_num = '$write[wr_num]'
and wr_reply = ''
and wr_is_comment = '0' ";
$row = sql_fetch($sql);
if ($row[mb_id] == $member[mb_id])
$is_owner = true;
}
$ss_name = "ss_secret_{$bo_table}_$write[wr_num]";
if (!$is_owner)
{
//$ss_name = "ss_secret_{$bo_table}_{$wr_id}";
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 패스워드를 묻지 않습니다.
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
//if ("$bo_table|$write[wr_num]" != get_session("ss_secret"))
if (!get_session($ss_name))
goto_url("./password.php?w=s&bo_table=$bo_table&wr_id=$wr_id{$qstr}");
}
set_session($ss_name, TRUE);
}
}
// 한번 읽은글은 브라우저를 닫기전까지는 카운트를 증가시키지 않음
$ss_name = "ss_view_{$bo_table}_{$wr_id}";
if (!get_session($ss_name))
{
sql_query(" update $write_table set wr_hit = wr_hit + 1 where wr_id = '$wr_id' ");
// 자신의 글이면 통과
if ($write[mb_id] && $write[mb_id] == $member[mb_id])
;
else
{
// 회원이상 글읽기가 가능하다면
if ($board[bo_read_level] > 1) {
if ($member[mb_point] + $board[bo_read_point] < 0)
alert("보유하신 포인트(".number_format($member[mb_point]).")가 없거나 모자라서 글읽기(".number_format($board[bo_read_point]).")가 불가합니다.\\n\\n포인트를 모으신 후 다시 글읽기 해 주십시오.");
insert_point($member[mb_id], $board[bo_read_point], "$board[bo_subject] $wr_id 글읽기", $bo_table, $wr_id, '읽기');
}
}
set_session($ss_name, TRUE);
}
$g4[title] = "$group[gr_subject] > $board[bo_subject] > " . strip_tags(conv_subject($write[wr_subject], 255));
}
else
{
if ($member[mb_level] < $board[bo_list_level])
{
if ($member[mb_id])
alert("목록을 볼 권한이 없습니다.", $g4[path]);
else
//alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id{$qstr}&url=".urlencode("board.php?bo_table=$bo_table&wr_id=$wr_id"));
alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오."); //미니홈피사용시 메인으로 이동 방지 2009.10.25
}
if (!$page) $page = 1;
$g4[title] = "$group[gr_subject] > $board[bo_subject] $page 페이지";
}
include_once("$g4[path]/head.sub.php");
// 로그인된 회원의 권한이 설정된 읽기 권한보다 작다면
if ($member[mb_level] < $board[bo_read_level])
{
if ($member[mb_id])
//alert("글을 읽을 권한이 없습니다.");
alert("글을 읽을 권한이 없습니다.", $g4[path]);
else
//alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id{$qstr}&url=".urlencode("./board.php?bo_table=$bo_table&wr_id=$wr_id"));
alert("글을 읽을 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오."); //미니홈피사용시 메인으로 이동 방지 2009.10.25
}
// 자신의 글이거나 관리자라면 통과
//if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin)
if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin || ($sca == $member[mb_id]) || $member[mb_id] == $write[wr_9]) //미니필 ; write[wr_9]에 대한 부분이 지정 비밀글에 쓰인 것 2009.11.03
;
else
{
// 비밀글이라면
if (strstr($write[wr_option], "secret"))
{
// 회원이 비밀글을 올리고 관리자가 답변글을 올렸을 경우
// 회원이 관리자가 올린 답변글을 바로 볼 수 없던 오류를 수정
$is_owner = false;
if ($write[wr_reply] && $member[mb_id])
{
$sql = " select mb_id from $write_table
where wr_num = '$write[wr_num]'
and wr_reply = ''
and wr_is_comment = '0' ";
$row = sql_fetch($sql);
if ($row[mb_id] == $member[mb_id])
$is_owner = true;
}
$ss_name = "ss_secret_{$bo_table}_$write[wr_num]";
if (!$is_owner)
{
//$ss_name = "ss_secret_{$bo_table}_{$wr_id}";
// 한번 읽은 게시물의 번호는 세션에 저장되어 있고 같은 게시물을 읽을 경우는 다시 패스워드를 묻지 않습니다.
// 이 게시물이 저장된 게시물이 아니면서 관리자가 아니라면
//if ("$bo_table|$write[wr_num]" != get_session("ss_secret"))
if (!get_session($ss_name))
goto_url("./password.php?w=s&bo_table=$bo_table&wr_id=$wr_id{$qstr}");
}
set_session($ss_name, TRUE);
}
}
// 한번 읽은글은 브라우저를 닫기전까지는 카운트를 증가시키지 않음
$ss_name = "ss_view_{$bo_table}_{$wr_id}";
if (!get_session($ss_name))
{
sql_query(" update $write_table set wr_hit = wr_hit + 1 where wr_id = '$wr_id' ");
// 자신의 글이면 통과
if ($write[mb_id] && $write[mb_id] == $member[mb_id])
;
else
{
// 회원이상 글읽기가 가능하다면
if ($board[bo_read_level] > 1) {
if ($member[mb_point] + $board[bo_read_point] < 0)
alert("보유하신 포인트(".number_format($member[mb_point]).")가 없거나 모자라서 글읽기(".number_format($board[bo_read_point]).")가 불가합니다.\\n\\n포인트를 모으신 후 다시 글읽기 해 주십시오.");
insert_point($member[mb_id], $board[bo_read_point], "$board[bo_subject] $wr_id 글읽기", $bo_table, $wr_id, '읽기');
}
}
set_session($ss_name, TRUE);
}
$g4[title] = "$group[gr_subject] > $board[bo_subject] > " . strip_tags(conv_subject($write[wr_subject], 255));
}
else
{
if ($member[mb_level] < $board[bo_list_level])
{
if ($member[mb_id])
alert("목록을 볼 권한이 없습니다.", $g4[path]);
else
//alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오.", "./login.php?wr_id=$wr_id{$qstr}&url=".urlencode("board.php?bo_table=$bo_table&wr_id=$wr_id"));
alert("목록을 볼 권한이 없습니다.\\n\\n회원이시라면 로그인 후 이용해 보십시오."); //미니홈피사용시 메인으로 이동 방지 2009.10.25
}
if (!$page) $page = 1;
$g4[title] = "$group[gr_subject] > $board[bo_subject] $page 페이지";
}
include_once("$g4[path]/head.sub.php");
올려주신 소스에서 안보이는 board.php 상단이나,
list.skin.php 파일에서 어딘가 비밀글 무시하도록 셋팅이 되어있을꺼에요.
그걸 찾아야합니다.
다시 접속하니까 패스워드 창이 뜨네요? 해결되신건가요 ㅎㅎ
list.skin.php 파일에서 어딘가 비밀글 무시하도록 셋팅이 되어있을꺼에요.
그걸 찾아야합니다.
다시 접속하니까 패스워드 창이 뜨네요? 해결되신건가요 ㅎㅎ
// 자신의 글이거나 관리자라면 통과
//if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin)
if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin || ($sca == $member[mb_id]) || $member[mb_id] == $write[wr_9]) //미니필 ; write[wr_9]에 대한 부분이 지정 비밀글에 쓰인 것 2009.11.03
;
공수래님의 친절한 답변으로 테스트해본결과 위 코드때문에 비밀글의 권한이 무시되었습니다..
원래 코드는
// 자신의 글이거나 관리자라면 통과
if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin)
이거였는데요...미니필때문에 저걸로 바꿨는데...흠...미니필도 해결하고 비밀글도 해결할 방법은 없을까요?
//if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin)
if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin || ($sca == $member[mb_id]) || $member[mb_id] == $write[wr_9]) //미니필 ; write[wr_9]에 대한 부분이 지정 비밀글에 쓰인 것 2009.11.03
;
공수래님의 친절한 답변으로 테스트해본결과 위 코드때문에 비밀글의 권한이 무시되었습니다..
원래 코드는
// 자신의 글이거나 관리자라면 통과
if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin)
이거였는데요...미니필때문에 저걸로 바꿨는데...흠...미니필도 해결하고 비밀글도 해결할 방법은 없을까요?
저는 미니필이 뭔지 모르겠습니다.
if 구문을 잘 분석해 보시고, 수정해서 적용해보세요. 나머지는 공부하자님의 숙제입니다.
if 구문을 잘 분석해 보시고, 수정해서 적용해보세요. 나머지는 공부하자님의 숙제입니다.
미니홈페이지입니다...어떤분계서 미니홈페이지 팁으로 올려주신것을 적용했는데 문제점을 이제야 발견했네요