올바른 방법으로 이용해 주십시오. (2017-07-03 수정) > 그누보드5 팁자료실

그누보드5 팁자료실

올바른 방법으로 이용해 주십시오. (2017-07-03 수정) 정보

올바른 방법으로 이용해 주십시오. (2017-07-03 수정)

본문

업그레이드 되면서 보안 강화차원에서 새로운 코드가 추가됩니다.

5.2.4 기준

1-1. 그누보드5 / skin / board / 폴더 / write.skin.php
    <form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
    <input type="hidden" name="w" value="<?php echo $w ?>">

에서 아래와 같이 uid 관련 코드가 없으면 추가하세요

    <form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
    <input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
    <input type="hidden" name="w" value="<?php echo $w ?>">


1-2. 그누보드5 / skin / board / 폴더 / write.skin.php
            <input type="submit" value="작성완료" id="btn_submit" accesskey="s" class="btn_submit">
5.2.3 버전에서 게시글 CSRF 취약점 관련 수정되면서 type="sumit" 가 아닌 경우엔 오류 발생
type="button" 또는 type="image" 등을 사용하고자 하는 경우엔 http://sir.kr/g5_tip/4837 참고


2-1. 그누보드5 / skin / board / 폴더 / view_comment.skin.php
    <form name="fviewcomment" action="./write_comment_update.php" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
    <input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
   <input type="hidden" name="w" value="<?php echo $w ?>" id="w">

의 내용에서 uid 관련 코드가 있으면 아래처럼 삭제하세요

    <form name="fviewcomment" action="./write_comment_update.php" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
   <input type="hidden" name="w" value="<?php echo $w ?>" id="w">


2-2. 그누보드5 / skin / board / 폴더 / view_comment.skin.php
    <?php if($is_guest) echo chk_captcha_js();  ?>

의 내용이 추가

    <?php if($is_guest) echo chk_captcha_js();  ?>

    set_comment_token(f);


2-3. 그누보드5 / skin / board / 폴더 / view_comment.skin.php
            $query_string = str_replace("&", "&amp;", $_SERVER['QUERY_STRING']);

의 내용이 보이면 아래의 것으로 변경하세요.

            $query_string = clean_query_string($_SERVER['QUERY_STRING']);


2-4. 그누보드5 / skin / board / 폴더 / view_comment.skin.php
            $query_string = clean_query_string($_SERVER['QUERY_STRING']);

            if($w == 'cu') {
                $sql = " select wr_id, wr_content from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
                $cmt = sql_fetch($sql);

와 같이 코드가 보이면 아래처럼 변경하세요.

            $query_string = clean_query_string($_SERVER['QUERY_STRING']);

            if($w == 'cu') {
                $sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
                $cmt = sql_fetch($sql);
                if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id'])))
                    $cmt['wr_content'] = '';


3. 위의 작업을 진행한후 익스플로러, 크롬, 파이어폭스, 사파리 등 다양한 브라우저로 테스트를 하세요
일부 브라우저는 캐시/임시파일 등으로 인해서 변경된것을 인지 못하는 경우가 있습니다.


참고자료
http://sir.kr/g5_tip/4524
http://sir.kr/g5_tip/4837
추천
2

댓글 10개

<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
이 부분은 g4s 시절까지만 없던 내용이며 그누5 베타 초기 버전부터는 기본적으로 포함되어 있고 코멘트 쓰기 스킨 파일에서는 현재 사용되지 않습니다.
그리고 코멘트 관련 코드(if($w == 'cu') {........}) 부분도 올바른 방법으로 에러와는 관련이 없는 내용으로 알고 있는데 보다 자세하게 알 수 있을까요? 저 패치는 비밀 댓글 노출 취약점 패치였을 겁니다.
실제 위 내용을 모두 없애고 테스트를 해 봐도 글은 정상적으로 등록이 잘 됩니다.
QA 하다가 이 문제를 살펴보기 위해 스킨 백여 개 이상을 테스트해봤는데 저 부분들에서는 영향이 없는 걸로 파악이 됐었습니다. 물론 개인적인 테스트였을 뿐 확실한 건 아닙니다.
2-1. <input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">  는 코드가 삭제되었군요
2-2 는 2-2와 2-3 으로 세분화 시켰습니다.
2-1~2-3 까지 수정하면 코멘트에서의 올바른 글 문제는 해결되네요

2-4는 if($w == 'cu') 의 경우는 올바른 방법의 문제는 아니지만 코드가 추가된 것이라서 함께 기록하였습니다.
1-2, 와 2-2 를 제외한 나머지 부분들은 올바른 에러와는 관련이 없습니다.
get_uniqid 를 계속해서 강조하셨던데 저 부분은 있으나 없으나 글은 정상적으로 등록이 잘 됩니다.
해당 내용은 패치와도 연관성이 없습니다. 보안 패치로 중간에 추가된 게 아니라 그누5 베타 버전 개발 시작부터 지금까지 원래 쭉 저렇게 있었던 고정된 코드입니다.
그리고 uid 값 저건 글쓰기 페이지에서는 임시저장 기능에 사용되는 부분인 걸로 알고 있습니다.
그래서 올바른.. 에러와는 연관성이 없으며 코멘트 쓰기에도 필요가 없는 것이죠.
2-1은 있던 게 삭제된 게 아니라 애초에 있었던 적이 없었습니다. 코멘트에는 임시저장 기능이 없기 때문입니다.
혹시나 해서 예전 버전 다 뒤져봤습니다.

제가 다른 분들 정보글에 이런 글을 남기는 건 처음인데 이 문제 하나만큼은 여러 버전의 그누보드와 스킨을 테스트해보면서 해봤었던 터라서 혹시라도 제가 놓치고 있는 부분이 있나 싶어서 계속해서 확인을 드립니다.
1-1 은 write.skin.php 에 어느순간부터 추가된 코드이므로, 없는 스킨인 경우엔 추가해야죠
1-2 ...
2-1 은 베타버전 등 몇몇개를 확인해보니 코드가 없네요.  혹시 있으면 제거하라는 의미입니다.
2-2 ...
2-3 은 버전업에 따른 코드가 변경된 내용이므로 영향이 없다고 할수는 없죠.
2-4 는 기존 스킨에서 누락된 경우가 있으니 참고라하는 의미입니다.
제목은 올바른.. 에러 관련 글인데 get_uniqid 자체가 올바른 에러와는 관련이 없다는 말씀을 드린 겁니다.
개발 시작때부터 저 상태였었고요. 바뀐 적도 추가된 적도 없었습니다.
임시저장 기능에 사용되는 코드라서 혹시 임시저장을 뺀 스킨은 넣을 필요가 없습니다.
정보 글에 이런 댓글 남겨서 죄송합니다. 무의미한 논쟁이 될 것 같아서 이만 줄이겠습니다.
음.. 저의 관점은 이렇습니다.
g4 스킨을 변경해서 사용한 경우도 생각해봐야 하지 않을런지요.
단순히 g4 코드만 g5 로 변경한 경우에 새롭게 추가된 코드가 있음을 인지하지 못하는 경우도 있으니까요.
g5 의 basic 스킨에서 확장된 것만 생각할 것이 아니라, g4 에서 넘어온 스킨도 ...
전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

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