패치 후 다운로드 토큰 유효시간 오류 ....
본문
bb/download.php를 수정해서 사용중입니다.
(스크립트로 자료 펌 하는 것을 차단하기위해 비회원 다운로드 할때 리캡차 거쳐야 하고 하루 다운로드 횟수를 지정하도록 수정해서 사용중)
그런데 최근
아래 보안패치를 하였는데....
https://github.com/gnuboard/gnuboard5/commit/27434107e8f6c84222e99352a877a2809eba12e9
회원로그인 상태에서는 다운로드가 문제가없는데
비회원으로 다운로드 할때는 리캡차를 거친 후 자동다운로드가 되지않고
위와 같은 오류가 뜨면서 다운로드가 되지 않고 있습니다.
그래서 어쩔 수 없이
다른 파일 패치한 부분은 그대로 사용하고
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();
위 수정된 부분 같이 사용하면서 보안 패지부분 적용해서 오류안나게 사용할 방법이 있는지
도움 좀 부탁드립니다.
!-->!-->
답변을 작성하시기 전에 로그인 해주세요.