그누보드 4.31.01 (CSRF 보안 강화 수정) 정보
그누보드 4.31.01 (CSRF 보안 강화 수정)
첨부파일
본문
4.31.01 (08.10.29)
: extract($_GET); 으로 인한 오류 수정
letsgolee 님께서 도움 주셨습니다.
: token 적용이 되지 않은 페이지 token 적용
adm/member_form.php
adm/member_form_update.php
common.php
lib/common.lib.php
* 4.31.00 다운로드 받으신 분들은 위 파일만 교체해 주시면 됩니다.
: extract($_GET); 으로 인한 오류 수정
letsgolee 님께서 도움 주셨습니다.
: token 적용이 되지 않은 페이지 token 적용
adm/member_form.php
adm/member_form_update.php
common.php
lib/common.lib.php
* 4.31.00 다운로드 받으신 분들은 위 파일만 교체해 주시면 됩니다.
댓글 전체
감사합니다.^^ 1등
2등 ㅋㅋ 수고하셨습니다. ㅎㅎ
슬쩍 3등
잘 쓰겠습니다~~
잘 쓰겠습니다~~
신속한 패치 늘 감사 드립니다.
수고 하셨습니다. ^^
/cheditor4/insert_image.php의 앞부분에 보면 mkdir하는 명령이 있습니다.
이것은 install에 들어가야 하는 것이고, upgrade.php에 들어가야 하는 것이 아닌가요?
그림을 넣을 때마다 mkdir chdir 하는 것이라 알려드립니다.
@mkdir("$g4[path]/data/$g4[cheditor4]/", 0707);
@chmod("$g4[path]/data/$g4[cheditor4]/", 0707);
이것은 install에 들어가야 하는 것이고, upgrade.php에 들어가야 하는 것이 아닌가요?
그림을 넣을 때마다 mkdir chdir 하는 것이라 알려드립니다.
@mkdir("$g4[path]/data/$g4[cheditor4]/", 0707);
@chmod("$g4[path]/data/$g4[cheditor4]/", 0707);
패치하여 사용하는 경우도 고려를 한것입니다.
그리구 /install/install_db.php에서
// 1.00.09 - data/log 삽입
// 디렉토리 생성
$dir_arr = array ("../extend",
"../data",
"../data/file",
"../data/log",
"../data/member",
"../data/session",
"../data/$g4[editor]"); <--- 요고 바꿔야되요.
// 1.00.09 - data/log 삽입
// 디렉토리 생성
$dir_arr = array ("../extend",
"../data",
"../data/file",
"../data/log",
"../data/member",
"../data/session",
"../data/$g4[editor]"); <--- 요고 바꿔야되요.
수고하셨습니다. ^^
감사합니다,..
수고하셨습니다.
이제 대충 패치 다했네요; 헉헉 ㅎㄷㄷ
이제 대충 패치 다했네요; 헉헉 ㅎㄷㄷ
감사합니다~~~
겨우 패치 끝났네요...;;
워낙에 수정하고 추가한 코드가 많다보니, 일일이 비교하는것이 정말 힘들었지만.. 수고하셨습니다.^^
워낙에 수정하고 추가한 코드가 많다보니, 일일이 비교하는것이 정말 힘들었지만.. 수고하셨습니다.^^
ㅠ..ㅠ... 저는 이제 adm, bbs, skin/board, skin/member를 해야 됩니다. 부러워요.
4.30에서 3.32로 업글해서 사용중인데 간혹 게시판 설정을 변경하다보면 토큰 에러가 나면서 페이지가 닫히는데 왜 그러죠 ㅡ.ㅡ;; 따로 코드 건드린건 없으니 업글된 파일만 덮어 씌웠습니다. 업글을 잘못한건가요 -0-;;; UTF-8버전입니다. 간혹 에러나는거라 어디에서 문제가 있는건지 보여드리지를 못하고 문의만 드립니다 ㅠㅠ
업하기가 너무 무서버여...
수고많으셨습니다. (__) ^^
고맙습니다.^^
/adm/board_form_update.php에서 $_POST를 위에만 적용하고 밑에는 그냥 뒀더라구요. ㅠ..ㅠ...
지금은 개별 게시판은 막고, 그룹게시판은 허용하는 형태인데, 그러면 안되는 것이 아닌가요???
그래서 저는 변수를 새로 지정하게 했어요. 안그러면 2번 작업을 해야 하니까요.
... 요기 아래가 다 문제가 되죠 ...
// 같은 그룹내 게시판 동일 옵션 적용
$s = "";
if ($chk_admin) $s .= " , bo_admin = '$bo_admin' ";
if ($chk_list_level) $s .= " , bo_list_level = '$bo_list_level' ";
if ($chk_read_level) $s .= " , bo_read_level = '$bo_read_level' ";
지금은 개별 게시판은 막고, 그룹게시판은 허용하는 형태인데, 그러면 안되는 것이 아닌가요???
그래서 저는 변수를 새로 지정하게 했어요. 안그러면 2번 작업을 해야 하니까요.
... 요기 아래가 다 문제가 되죠 ...
// 같은 그룹내 게시판 동일 옵션 적용
$s = "";
if ($chk_admin) $s .= " , bo_admin = '$bo_admin' ";
if ($chk_list_level) $s .= " , bo_list_level = '$bo_list_level' ";
if ($chk_read_level) $s .= " , bo_read_level = '$bo_read_level' ";
불당님 언급대로 소스를 몇개 처다보니 머리가 아파오기 시작합니다.... 관리자님 보안 패치가 제대로 않된 것 같은 데요.... 전 가장 중요한 member_form_update.php만 보는데도 그런데...
수고 많으셨습니다~
adm/* 패치하다보니 어떤곳에서는 값을 POST로 받고 어떤곳은 받지 않은데, 의도하신것인지 궁금합니다...
아 수고하셨습니다.
/adm/auth_update.php
$_POST[$d], _POST[$d] 코드 오류 아닌가요??
그리고, 몇번 쓰는 변수라면 가독성이 좋게, 기존 코드위에 $_post[..]하는 것을 넣는게 나을꺼 같아요.
$mb_id = $_POST[mb_id];
$au_menu = $_POST[au_menu];
$r = $_POST[r];
$w = $_POST[w];
$d = $_POST[d];
----
$sql = " insert into $g4[auth_table]
set mb_id = '$_POST[mb_id]',
au_menu = '$_POST[au_menu]',
au_auth = '$_POST[r],$_POST[$w],$_POST[$d]' "; <--- 요기
$result = sql_query($sql, FALSE);
if (!$result) {
$sql = " update $g4[auth_table]
set au_auth = '$_POST[r],$_POST[$w],_POST[$d]' <--- 요기
where mb_id = '$_POST[mb_id]'
and au_menu = '$_POST[au_menu]' ";
sql_query($sql);
}
$_POST[$d], _POST[$d] 코드 오류 아닌가요??
그리고, 몇번 쓰는 변수라면 가독성이 좋게, 기존 코드위에 $_post[..]하는 것을 넣는게 나을꺼 같아요.
$mb_id = $_POST[mb_id];
$au_menu = $_POST[au_menu];
$r = $_POST[r];
$w = $_POST[w];
$d = $_POST[d];
----
$sql = " insert into $g4[auth_table]
set mb_id = '$_POST[mb_id]',
au_menu = '$_POST[au_menu]',
au_auth = '$_POST[r],$_POST[$w],$_POST[$d]' "; <--- 요기
$result = sql_query($sql, FALSE);
if (!$result) {
$sql = " update $g4[auth_table]
set au_auth = '$_POST[r],$_POST[$w],_POST[$d]' <--- 요기
where mb_id = '$_POST[mb_id]'
and au_menu = '$_POST[au_menu]' ";
sql_query($sql);
}
/adm/board_delete.inc.php에서 포인트와 추천정보 삭제가 빠져 있어요. 보완사항 입니다.
---
// 포인트 삭제
sql_query(" delete from $g4[point_table] where po_rel_table = '$tmp_bo_table' ");
// 추천 정보 삭제
sql_query(" delete from $g4[board_good_table] where po_rel_table = '$tmp_bo_table' ");
---
// 포인트 삭제
sql_query(" delete from $g4[point_table] where po_rel_table = '$tmp_bo_table' ");
// 추천 정보 삭제
sql_query(" delete from $g4[board_good_table] where po_rel_table = '$tmp_bo_table' ");
/adm/auth_update.php에서 최고관리자(admin)의 권한도 설정가능 합니다. ㅋㅋ
그것을 못하게 하려면, 앞부분에 아래 코드를 추가하면 됩니다.
if ($mb[mb_id] == $config[cf_admin])
alert("최고관리자의 권한은 제한할 수 없습니다.");
그것을 못하게 하려면, 앞부분에 아래 코드를 추가하면 됩니다.
if ($mb[mb_id] == $config[cf_admin])
alert("최고관리자의 권한은 제한할 수 없습니다.");
이건 업뎃을 해야하나 말아야하나......;;;
에잇, 그냥 해야지
이게다 나쁜 크래커들 때문에...-_-
보안문제 때문에 맨날 골머리..특히 중국 크래커들!!
아무튼 감사히 잘쓰겠습니다^^
보안문제 때문에 맨날 골머리..특히 중국 크래커들!!
아무튼 감사히 잘쓰겠습니다^^
common.lib.php
// XSS (Cross Site Script) 막기 부분에서
$content = preg_replace("/(on)([^\=]+)/i", "on$2", $content);
위와 같은 코드가 있던데 cheditor에서 그림을 삽입하면 파일명이 자동으로 바뀌면서
Hkwj5AeeoNxRMic.jpg
위와같이 난수로 저장을 하는데..
중간에 "oN"이 포함되어 있는 경우에 on으로 인식, 코드를 바꿔버려서 그림이 정상적으로 출력이 안됩니다.
에러난 원인을 한참 찾던중에 철자 on은 "on$2" 로 바꿔버리는데 대소문자 구별없이 on을 바꿔버려서 oN 이 on으로 바뀌어서 이미지가 정상적으로 출력이 안되버리는 현상이 있더군요...
대소문자 구별해서 특수기호로 바꿔야 할 것 같습니다.
// XSS (Cross Site Script) 막기 부분에서
$content = preg_replace("/(on)([^\=]+)/i", "on$2", $content);
위와 같은 코드가 있던데 cheditor에서 그림을 삽입하면 파일명이 자동으로 바뀌면서
Hkwj5AeeoNxRMic.jpg
위와같이 난수로 저장을 하는데..
중간에 "oN"이 포함되어 있는 경우에 on으로 인식, 코드를 바꿔버려서 그림이 정상적으로 출력이 안됩니다.
에러난 원인을 한참 찾던중에 철자 on은 "on$2" 로 바꿔버리는데 대소문자 구별없이 on을 바꿔버려서 oN 이 on으로 바뀌어서 이미지가 정상적으로 출력이 안되버리는 현상이 있더군요...
대소문자 구별해서 특수기호로 바꿔야 할 것 같습니다.
아~ 이것 때문에 이미지 문제가 있었네요.
이미지 뿐 아니라 font, strong 및 option 태그라든지 혹은 링크 중에 on들어간 것도 문제됩니다...
임시방편으로 다음으로 바꾸어야 할 것 같네요.
$content = preg_replace("/(on)(abort|blur|change|click|dblclick|dragdrop|error|focus|keydown|keypress|keyup|load|mousedown|mousemove|mouseout|mouseover|mouseup|mouseenter|mouseleave|move|reset|resize|select|submit|unload)(\s*=)/i", "on$2$3", $content);
그리고 bad_tag_convert()함수에 meta태그를 추가합니다.
// 악성태그 변환
function bad_tag_convert($code)
{
return preg_replace("/\<([\/]?)(script|iframe|meta)([^\>]*)\>/i", "<$1$2$3>", $code);
}
임시방편으로 다음으로 바꾸어야 할 것 같네요.
$content = preg_replace("/(on)(abort|blur|change|click|dblclick|dragdrop|error|focus|keydown|keypress|keyup|load|mousedown|mousemove|mouseout|mouseover|mouseup|mouseenter|mouseleave|move|reset|resize|select|submit|unload)(\s*=)/i", "on$2$3", $content);
그리고 bad_tag_convert()함수에 meta태그를 추가합니다.
// 악성태그 변환
function bad_tag_convert($code)
{
return preg_replace("/\<([\/]?)(script|iframe|meta)([^\>]*)\>/i", "<$1$2$3>", $code);
}