패치 후 다운로드 토큰 유효시간 오류 ....

패치 후 다운로드 토큰 유효시간 오류 ....

QA

패치 후 다운로드 토큰 유효시간 오류 ....

본문

bb/download.php를 수정해서 사용중입니다.

(스크립트로 자료 펌 하는 것을 차단하기위해 비회원 다운로드 할때 리캡차 거쳐야 하고 하루 다운로드 횟수를 지정하도록 수정해서 사용중)

 

그런데 최근 

 

아래 보안패치를 하였는데....

 

https://github.com/gnuboard/gnuboard5/commit/27434107e8f6c84222e99352a877a2809eba12e9

 

회원로그인 상태에서는 다운로드가 문제가없는데

 

비회원으로 다운로드 할때는 리캡차를 거친 후 자동다운로드가 되지않고 

 

3025377459_1687167743.4336.gif

 

위와 같은 오류가 뜨면서 다운로드가 되지 않고 있습니다.

 

그래서 어쩔 수 없이 

 

다른 파일 패치한 부분은 그대로 사용하고

 

bb/download.php에서 추가된 보안패치 부분인 아래 소스만 제거하고 사용하고 있습니다.

(아래 보안패치 부분을 사용 안하면 오류가 안나옴)

 


$nonce = isset($_REQUEST['nonce']) ? preg_replace('/[^0-9a-z\|]/i', '', $_REQUEST['nonce']) : '';
 
if (function_exists('download_file_nonce_is_valid') && !defined('G5_DOWNLOAD_NONCE_CHECK')){
    if(! download_file_nonce_is_valid($nonce, $bo_table, $wr_id)){
        alert('토큰 유효시간이 지났거나 토큰이 유효하지 않습니다.\\n브라우저를 새로고침 후 다시 시도해 주세요.', G5_URL);
    }
}

 

여기에서 다시 위 보안패치 적용해서 오류안나게 하는 방법은 없을까요...?

 

아래 소스는 제가 사용하는 bb/download.php (리캡차 적용)에서 수정(추가)된 부분입니다.

 


include_once('./_common.php');
 
// 다운로드 캡차 추가된 부분 시작
 
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
 
//error_reporting(E_ALL);
//ini_set("display_errors", 1);
 
// get download policy
list($download_level, $download_limits) = explode(",", $board['bo_9']);
$download_lastdate = $board['bo_10'];
 
// get state
$state = $_REQUEST['state'];
 
// clear download history
$tmp_row = sql_fetch("select IFNULL(DATEDIFF(CURDATE(), '{$download_lastdate}'), 1) as dt");
if($tmp_row['dt'] > 0) {
    $sql = "delete from {$g5['memo_table']} where me_send_mb_id = '@download' and DATE(me_send_datetime) < CURDATE()";
    sql_query($sql);
 
    $sql = "update {$g5['board_table']} set bo_10 = '" . G5_TIME_YMD . "' where bo_table = '{$bo_table}'";
    sql_query($sql);
}
 
// if captcha key is empty
if(empty($state)) {
    // Page ID
    $pid = ($pid) ? $pid : '';
    $at = apms_page_thema($pid);
    include_once(G5_LIB_PATH.'/apms.thema.lib.php');
 
    // 스킨 체크
    list($member_skin_path, $member_skin_url) = apms_skin_thema('member', $member_skin_path, $member_skin_url);
 
    $g5['title'] = '자동수집방지';
 
    include_once(G5_PATH.'/head.sub.php');
    if(!USE_G5_THEME) @include_once(THEMA_PATH.'/head.sub.php');
 
    echo "<style>html, body { background-color: transparent !important; }</style>";
 
    $no = (int)$no;
    $skin_path = $member_skin_path;
    $skin_url = $member_skin_url;
    $action_url = G5_HTTPS_BBS_URL . "/download.php";
    @include_once($board_skin_path.'/download.captcha.skin.php');
 
    include_once(G5_PATH.'/tail.sub.php');
    if(!USE_G5_THEME) @include_once(THEMA_PATH.'/tail.sub.php');
 
    exit;
} elseif($download_level > $member['mb_level']) {
    if (!chk_captcha()) {
        echo "<script>parent.close_download_captcha();</script>";
        alert('자동수집방지에 오류가 발생하였습니다.');
    } else {
        // get IP address
        $ipaddress = '';
        if (getenv('HTTP_CLIENT_IP'))
            $ipaddress = getenv('HTTP_CLIENT_IP');
        else if(getenv('HTTP_X_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
        else if(getenv('HTTP_X_FORWARDED'))
            $ipaddress = getenv('HTTP_X_FORWARDED');
        else if(getenv('HTTP_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_FORWARDED_FOR');
        else if(getenv('HTTP_FORWARDED'))
           $ipaddress = getenv('HTTP_FORWARDED');
        else if(getenv('REMOTE_ADDR'))
            $ipaddress = getenv('REMOTE_ADDR');
        else
            $ipaddress = 'UNKNOWN';
 
        // check download limits
        if($download_limits > 0) {
            $tmp_row = sql_fetch("
                select count(*) as cnt from {$g5['memo_table']}
                   where me_memo = '$ipaddress'
                       and me_send_mb_id = '@download'
                       and DATE(me_send_datetime) = CURDATE()
            ");
            $download_currents = $tmp_row['cnt'];
            if($download_currents >= $download_limits) {
                alert_close("일일 내려받기 횟수를 초과하였습니다.(" . $download_limits . "회)\\n등업(3등급)하시면 제한하지 않습니다.");
            }
 
            // add download history
            $tmp_row = sql_fetch(" select max(me_id) as max_me_id from {$g5['memo_table']} ");
            $me_id = $tmp_row['max_me_id'] + 1;
            $me_memo = $ipaddress;
            $sql = "
                insert into {$g5['memo_table']} ( me_id, me_recv_mb_id, me_send_mb_id, me_send_datetime, me_read_datetime, me_memo )
                    values ($me_id, '@download', '@download', '" . G5_TIME_YMDHIS . "', '" . G5_TIME_YMDHIS . "', '$me_memo')
            ";
            sql_query($sql);
        }
    }
}
 
// 다운로드 캡차 추가된 부분 끝
 
// clean the output buffer
ob_end_clean();
 

 

위 수정된 부분 같이 사용하면서 보안 패지부분 적용해서 오류안나게 사용할 방법이 있는지

 

도움 좀 부탁드립니다.

 

 

이 질문에 댓글 쓰기 :

답변 1

답변을 작성하시기 전에 로그인 해주세요.
전체 15
QA 내용 검색

회원로그인

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