답글에서 사용된 비밀글 오류(?) 입니다 -..-a > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

답글에서 사용된 비밀글 오류(?) 입니다 -..-a 정보

답글에서 사용된 비밀글 오류(?) 입니다 -..-a

본문

오늘 회원분이 신고해주셔서 문제를 확인 했습니다. -..-a
 
A (원글) - 비밀글 아님
   B (비밀글) - 작성자 BBB
   C (비밀글) - 작성자 CCC
   D (비밀글) - 작성자 DDD
 
일반 회원들은 비밀글 B, C, D를 읽을 수 없습니다.
 
그런데, 비밀글 D를 작성한 회원 DDD는 비밀글 B, C를 읽을 수가 있습니다.
 
이런 오류... 어떻게 처리해야 하나요? 혹시 이런 오류를 보신 적이 있나요?
 
그누보드 버젼은 4.11.0 입니다.
  • 복사

댓글 전체

4.11.0이 될때까지 확인이 안되었다니... -..-a
아무래도 board.php를 수정해야 하겠죠?...
bbs/board.php에서 해당 부분을 퍼왔어요.
어디를 수정해야 되는지 부탁드릴께요.
아무리 읽어봐도 뭐가 문제인지 모르겠어요.

    // 자신의 글이거나 관리자라면 통과
    if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin || $member[mb_id] == $write[wr_5]) // 도솔천님. 특정회원에게 글보이기를 위해 수정함
        ;
    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);
        }
    }
한 사람이 테스트하면 쿠키때문에 다 보이게 됩니다.

B,C,D 를 각각 다른 아이디로 로그인해서 작성한후
브라우져를 다 닫고 다시 D 로 로그인하여 B 혹은 C 글을 클릭하면
비밀번호 입력페이지로 이동하시는 걸 보실 수 있습니다.

A (원글) - 비밀글 아님
  B (비밀글) - 작성자 BBB
  C (비밀글) - 작성자 CCC
  D (비밀글) - 작성자 DDD
ㅎㅎ
이놈 아래있는것은 주석처리하지 마시고, 이놈만 주석처리하십시오.
    //if (!get_session($ss_name))
        goto_url("./password.php?w=s&bo_table=$bo_table&wr_id=$wr_id{$qstr}");
이것도 좀 더 세부적으로 보자면 버그라고 할 수 있겠지요.

[원글] 작성자는 정상적인 게시물(비밀글 아님)을 작성
    ㄴ[답글] 첫번째 답글 작성자는 비밀글 작성 가능
    ㄴ[답글] 두번째 답글 작성자는 비밀글 작성 가능
    ㄴ[답글] 세번째 답글 작성자는 비밀글 작성 가능
 ... 반복 ...

이러한 루틴 자체가 논리적인 문제가 있습니다.
답변글이라면 원글의 형태를 따라가야 하며,
게시물 '작성자 & 관리자'가 아닌 경우에만 비밀글에 관한 처리를 고려한다는 것은,
상당한 무리수가 따른다고 볼 수도 있습니다.
관리권한이 없는 일반적인 회원이라면,
원글의 형태(일반/비밀글)를 따라가거나,
(이것은 '헐랭이님의 원글&답글 및 카테고리 유지에 팁' 내용을 참조)
아예 '비밀글' 작성을 할 수 없도록 검토되어야 할 것 같습니다.
© SIRSOFT
현재 페이지 제일 처음으로