4.34.19 (2012.01.17)
: 특정 서버에 따라 캡챠이미지의 결과를 인식하지 못하는 오류를 수정
(해외 서버에서 euc-kr 을 사용하는 경우에 오류가 보고된바 있습니다.)
bbs/kcaptcha_result.php 에 아래 코드가 한줄 추가 되었습니다.
header("Content-Type: text/html; charset=$g4[charset]");
4.34.18 (2012.01.03)
: PHP 버전에 따른 basic 회원 스킨 사용시 euc-kr 버전에서 ajax 가 제대로 작동되도록 수정 (konahn님)
skin/member/basic/_common.php 를 아래와 같이 수정하십시오.
$g4_path = "../../.."; // common.php 의 상대 경로
include_once("$g4_path/common.php");
header("Content-Type: text/html; charset=$g4[charset]"); // 추가된 코드
4.34.17 (11.12.09)
: [보안패치] 게시물 검색시 $sfl 변수를 이용하여 패스워드 유추가 가능한 부분을 수정 (i2Sec-김세연[kaist]님)
bbs/search.php 의
switch ($field[$k])
{
case "mb_id" :
case "mb_name" :
$str .= "$field[$k] = '$s[$i]'";
break;
default :
if (preg_match("/[a-zA-Z]/", $search_str))
$str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
else
$str .= "INSTR($field[$k], '$search_str')";
break;
}
위 코드를
switch ($field[$k])
{
case "mb_id" :
case "wr_name" :
$str .= "$field[$k] = '$s[$i]'";
break;
case "wr_subject" :
case "wr_content" :
if (preg_match("/[a-zA-Z]/", $search_str))
$str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
else
$str .= "INSTR($field[$k], '$search_str')";
break;
default :
$str .= "1=0"; // 항상 거짓
break;
}
위와 같이 수정하여 주십시오.
lib/common.lib.php 의
switch ($field[$k]) {
case "mb_id" :
case "wr_name" :
$str .= " $field[$k] = '$s[$i]' ";
break;
case "wr_hit" :
case "wr_good" :
case "wr_nogood" :
$str .= " $field[$k] >= '$s[$i]' ";
break;
// 번호는 해당 검색어에 -1 을 곱함
case "wr_num" :
$str .= "$field[$k] = ".((-1)*$s[$i]);
break;
// LIKE 보다 INSTR 속도가 빠름
default :
if (preg_match("/[a-zA-Z]/", $search_str))
$str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
else
$str .= "INSTR($field[$k], '$search_str')";
break;
}
위 코드를
switch ($field[$k]) {
case "mb_id" :
case "wr_name" :
$str .= " $field[$k] = '$s[$i]' ";
break;
case "wr_hit" :
case "wr_good" :
case "wr_nogood" :
$str .= " $field[$k] >= '$s[$i]' ";
break;
// 번호는 해당 검색어에 -1 을 곱함
case "wr_num" :
$str .= "$field[$k] = ".((-1)*$s[$i]);
break;
case "wr_ip" :
case "wr_password" :
$str .= "1=0"; // 항상 거짓
break;
// LIKE 보다 INSTR 속도가 빠름
default :
if (preg_match("/[a-zA-Z]/", $search_str))
$str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
else
$str .= "INSTR($field[$k], '$search_str')";
break;
}
위와 같이 수정하여 주십시오.
4.34.16 (11.11.15)
: [보안패치] XSS 취약점 권고에 대한 수정 (i2Sec-김태형님)
lib/common.lib.php 의 function conv_content() 에서
$content = preg_replace("#\/\*.*\*\/#iU", "", $content);
이 코드의 위치를 바꿔 해결함
4.34.15 (11.10.24)
: [보안패치] SQL Injection 공격이 가능한 취약점 코드 조치 요청으로 인한 수정 (packet storm -> 한국인터넷진흥원)
bbs/tb.php 의 아래 코드가 수정 되었습니다.
// 영문자 숫자 _ 과 일치하지 않는 문자는 삭제한다. (최대 20자)
$bo_table = preg_replace("/\W/", "", substr($arr[1],0,20));
// 정수형으로 변환
$wr_id = (int)$arr[2];
// 영소문자 숫자 와 일치하지 않는 문자는 삭제한다. (최대 32자)
$to_token = preg_replace("/[^a-z0-9]/", "", substr($arr[3],0,32));
추신) 트랙백은 거의 사용하지 않는 기능으로 차기 버전에서는 기능 자체가 사라질수 있습니다.
4.34.14 (11.10.04)
: [보안패치] 회원가입시 홈페이지 필드를 통한 SQL Injection 공격 예방
: [보안패치] 글수정, 답변시 링크 필드를 통한 XSS 공격 예방
(팔팔이님께서 알려 주셨습니다.)
bbs/register_form_update.php 에 추가 되었습니다.
$mb_homepage = trim(strip_tags(mysql_escape_string($_POST[mb_homepage])));
bbs/write_update.php 에 추가 되었습니다.
$wr_link1 = mysql_real_escape_string($_POST['wr_link1']);
$wr_link2 = mysql_real_escape_string($_POST['wr_link2']);
bbs/write.php 에 추가 되었습니다.
else if ($w == "u") {
...
for ($i=1; $i<=$g4[link_count]; $i++) {
$write["wr_link".$i] = get_text($write["wr_link".$i]);
$link[$i] = $write["wr_link".$i];
}
...
} else if ($w == "r") {
...
for ($i=1; $i<=$g4[link_count]; $i++) {
$write["wr_link".$i] = get_text($write["wr_link".$i]);
}
4.34.13 (11.10.01)
: [보안패치] 회원가입 및 수정시 회원테이블 필드에 올바르지 않은 값이 포함될 수 있는 오류가 발견 되었습니다.
(팔팔이님께서 알려 주셨습니다.)
bbs/register_form.php
$member[mb_email] = get_text($member[mb_email]);
... 생략 ...
$member[mb_10] = get_text($member[mb_10]);
adm/member_form.php
$mb[mb_email] = get_text($mb[mb_email]);
... 생략 ...
$mb[mb_10] = get_text($mb[mb_10]);
lib/common.lib.php
function get_sideview($mb_id, $name="", $email="", $homepage="") 함수에 아래 코드가 추가 되었습니다.
$name = get_text($name);
$email = get_text($email);
$homepage = get_text($homepage);
4.34.12 (11.09.22)
: 글 또는 코멘트를 쓴 후 메일 발송을 하는 경우에 전체 회원에게 메일이 발송되지 않던 오류를 수정
(개미인간님께서 알려 주셨습니다.)
bbs/write_update.php
bbs/write_comment_update.php
두개의 파일 모두 아래 코드만 추가 되었습니다.
$unique_email = array_values($unique_email);
4.34.11 (11.09.20)
: 우편번호 2011.08.30.자 반영 (곱슬최씨님께서 도움 주셨습니다.)
bbs/zip.db
4.34.10 (11.08.10)
: [보안패치] $_SERVER 배열변수 값의 변조를 이용한 SQL Injection 공격을 막는 코드입니다.
(SK Infosec 장경칩님께서 알려 주셨습니다.)
bbs/visit_insert.inc.php 의
$sql = " insert $g4[visit_table] ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent ) values ( '$vi_id', '$_SERVER[REMOTE_ADDR]', '$g4[time_ymd]', '$g4[time_his]', '$_SERVER[HTTP_REFERER]', '$_SERVER[HTTP_USER_AGENT]' ) ";
를 아래 코드로 대체합니다.
$remote_addr = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$referer = mysql_real_escape_string($_SERVER['HTTP_REFERER']);
$user_agent = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
$sql = " insert $g4[visit_table] ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent ) values ( '$vi_id', '$remote_addr', '$g4[time_ymd]', '$g4[time_his]', '$referer', '$user_agent' ) ";
4.34.09 (11.07.26)
: 우편번호 파일 업데이트 2011.07.21 조정내역
http://zipfinder.co.kr/zipcode/modi_list.htm
: admin.menu300.php.bak 파일은 메뉴로 불러 들이지 않기
( pogusm 님께서 도움 주셨습니다. )
bbs/zip.db
adm/admin.lib.php
if (!preg_match("/^admin.menu([0-9]{3}).*\.php$/", $entry, $m))
4.34.08 (11.07.22)
: 접속자현황에서 한글 깨지는 오류 수정
: 관리자 > 게시판관리 > 인기검색어 관리, 인기검색어 순위 추가
lib/common.lib.php : is_utf8() 함수 추가
visit_list.php
adm/admin.menu300.php
adm/popular_list.php
adm/popular_rank.php
4.34.07 (11.07.01)
: [보안패치] 파일업로드의 오류를 이용한 XSS 공격 취약점을 수정 ( wh1ant님께서 도움 주셨습니다. )
php.ini 의 magic_quotes_gpc = Off 로 사용하는 경우에만 오류가 발생합니다.
: [보안패치] CHEDITOR5 에서 허가받지 않은 파일 삭제 버그가 발견 되었습니다. ( letsgolee님께서 도움 주셨습니다. )
: 우편번호 파일 업데이트 (잉크님께서 도움 주셨습니다.)
리 다음에 공란이 없어 "계곡리" 같은 주소가 표시되지 않던 버그를 수정
bbs/write_update.php 에 아래 코드를 추가하세요.
if (!get_magic_quotes_gpc()) {
$upload[$i]['source'] = addslashes($upload[$i]['source']);
}
아래 3개 파일을 교체해 주시기 바랍니다.
cheditor5/imageUpload/upload.php
cheditor5/imageUpload/delete.php
bbs/zip.db
4.34.06 (11.06.21)
: [추가보안패치] CHSOFT 대표 나창호님께서 도움 주셨습니다. ( CHEDITOR 제작자 )
4.34.05 에서 보완된 패치입니다.
플래시에서 이미지 파일이 아닌 경우에는 업로드 하지 않습니다.
아래 3개 파일을 교체해 주시기 바랍니다.
cheditor5/imageUpload/upload.php
cheditor5/popup/js/image.js
cheditor5/popup/flash/CHXImage.swf
4.34.05 (11.06.18)
: [보안패치] CHSOFT 대표 나창호님께서 도움 주셨습니다. ( CHEDITOR 제작자 )
GIF Exploit 이라고 불리우는 이 공격은 이미지 파일에 PHP 코드를 심어 서버에 업로드 합니다.
CHEDITOR5 버전에만 해당됩니다.
참고) 심각한 사안이므로 되도록 빨리 패치해 주시는 것이 좋습니다.
아래 2개 파일을 교체해 주시기 바랍니다.
cheditor5/imageUpload/upload.php
cheditor5/popup/js/image.js
추가사항)
data 폴더에서 php 나 html 파일을 실행하지 못하게 하려면 아래의 파일을 data 폴더에 만들어 놓으시기 바랍니다.
data 폴더에 하나만 만들어 놓으시면 됩니다.
파일명 : .htaccess (파일명 앞에 점이 붙습니다. 숨김 기능을 합니다.)
내용 :
Order allow,deny
Deny from all
4.34.04 (11.05.27)
: 글복사, 이동시 코멘트 삭제, 추가가 있었다면 코멘트가 제대로 복사, 이동되지 않는 버그를 수정하였습니다.
( 진서기님께서 이미 2009년에 알려주신 버그인데 패치가 늦었습니다. http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=18926 )
bbs/move_update.php 에서
$sql2 = " select * from $write_table where wr_num = '$wr_num' order by wr_parent, wr_comment desc, wr_id ";
를
$sql2 = " select * from $write_table where wr_num = '$wr_num' order by wr_parent, wr_is_comment, wr_comment desc, wr_id ";
이렇게 수정하시면 됩니다.
4.34.03 (11.05.17)
: [보안패치] SQL Injection 취약점에 대비한 코드 수정
(한국인터넷진흥원을 통하여 과천고등학교 권혁님께서 취약점과 해결방안을 자세하게 알려주셨습니다.)
: [보안패치] 이미지 태그의 src 속성에 download.php 링크가 있는 경우 게시물을 확인하는 것만으로도 파일의 다운로드가 가능한 취약점 수정
(국제정보보안센터[i2Sec]의 최종훈님께서 알려주셨습니다.)
lib/common.lib.php 의 get_sql_search() 함수에 추가
$field[$k] = preg_match("/^[\w\,\|]+$/", $field[$k]) ? $field[$k] : "wr_subject";
lib/common.lib.php 의 conv_content() 함수 추가
$content = preg_replace("/<(img[^>]+download\.php[^>]+bo_table[^>]+)/i", "*** CSRF 감지 : <$1", $content);
4.34.02 (11.05.13)
: [보안패치] 이미지 태그의 src 속성에 삭제등의 링크가 있는 경우 게시물을 확인하는 것만으로도 데이터의 위변조가 가능하므로 이것을 막음
(국제정보보안센터[i2Sec]의 최종훈님께서 알려주셨습니다.)
: 캡챠 코드 변경 (비회원이 코멘트 댓글을 다른 경우 캡챠이미지를 변경할 수 있도록 수정)
(letsgolee 님께서 알려주셨습니다.)
[보안패치]
lib/common.lib.php 의 conv_content() 함수에 아래 코드를 추가합니다.
$content = preg_replace("/<(img[^>]+delete\.php[^>]+bo_table[^>]+)/i", "*** CSRF 감지 : <$1", $content);
$content = preg_replace("/<(img[^>]+delete_comment\.php[^>]+bo_table[^>]+)/i", "*** CSRF 감지 : <$1", $content);
$content = preg_replace("/<(img[^>]+logout\.php[^>]+)/i", "*** CSRF 감지 : <$1", $content);
bbs/delete.php 와 bbs/delete_comment.php 에 아래 코드를 추가합니다.
if ($is_admin)
{
if (!($token && get_session("ss_delete_token") == $token))
alert("토큰 에러로 삭제 불가합니다.");
}
bbs/view.php 에 아래 코드를 추가합니다.
if ($is_admin)
{
set_session("ss_delete_token", $token = uniqid(time()));
$delete_href = "javascript:del('./delete.php?bo_table=$bo_table&wr_id=$wr_id&token=$token&page=$page".urldecode($qstr)."');";
}
bbs/view_comment.php 에 추가 또는 수정합니다.
추가
// 코멘트를 새창으로 여는 경우 세션값이 없으므로 생성한다.
if ($is_admin && !$token)
{
set_session("ss_delete_token", $token = uniqid(time()));
}
...
수정
$list[$i][del_link] = "./delete_comment.php?bo_table=$bo_table&comment_id=$row[wr_id]&token=$token&cwin=$cwin&page=$page".$qstr;
[캡챠코드변경]
js/jquery.kcaptcha.js 전체
skin/board/basic/view_comment.skin.php 를 아래와 같이 변경합니다.
jQuery.fn.extend({...}); 를 삭제하시고
//jQuery(this).kcaptcha_load(); 이 코드를 아래 코드로 수정합니다.
if (comment_id && work == 'c')
$.kcaptcha_run();
4.34.01 (11.05.11)
: 비회원의 답변 코멘트 쓰기에서 캡챠가 뜨지 않는 오류를 수정 (휴온님이 알려주셨습니다.)
4.33.00 에 있던 코드를 적용하였습니다.
단점) 캡챠이미지를 클릭하여 새로운 이미지로 변경할수 없음
skin/board/basic/view_comment.skin.php 를 아래와 같이 수정합니다.
jQuery.fn.extend({
kcaptcha_load: function() {
$.ajax({
type: 'POST',
url: g4_path+'/'+g4_bbs+'/kcaptcha_session.php',
cache: false,
async: false,
success: function(text) {
$('#kcaptcha_image')
.attr('src', g4_path+'/'+g4_bbs+'/kcaptcha_image.php?t=' + (new Date).getTime())
.css('cursor', '')
.attr('title', '');
md5_norobot_key = text;
}
});
}
});
function comment_box(comment_id, work)
{
...
if (typeof(wrestInitialized) != 'undefined')
wrestInitialized();
jQuery(this).kcaptcha_load();
4.34.00 (11.04.29)
: cheditor v5.04 탑재 (그누보드에서 사용할 수 있게 허락해주신 CHSOFT 나창호 대표님께 감사드립니다. www.chcode.com)
최신 버전(v5.06)은 약간의 문제가 있어 버전이 약간 낮은것으로 탑재합니다.
이미지 업로드시 플래시를 사용하는데 .htaccess 에 패스워드를 걸었다던지 하는 경우에는 이미지 업로드가 안됩니다.
플래시동영상은