그누보드 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 다운로드 받으신 분들은 위 파일만 교체해 주시면 됩니다.
|
댓글을 작성하시려면 로그인이 필요합니다.
로그인
댓글 32개
잘 쓰겠습니다~~
이것은 install에 들어가야 하는 것이고, upgrade.php에 들어가야 하는 것이 아닌가요?
그림을 넣을 때마다 mkdir chdir 하는 것이라 알려드립니다.
@mkdir("$g4[path]/data/$g4[cheditor4]/", 0707);
@chmod("$g4[path]/data/$g4[cheditor4]/", 0707);
// 1.00.09 - data/log 삽입
// 디렉토리 생성
$dir_arr = array ("../extend",
"../data",
"../data/file",
"../data/log",
"../data/member",
"../data/session",
"../data/$g4[editor]"); <--- 요고 바꿔야되요.
이제 대충 패치 다했네요; 헉헉 ㅎㄷㄷ
워낙에 수정하고 추가한 코드가 많다보니, 일일이 비교하는것이 정말 힘들었지만.. 수고하셨습니다.^^
지금은 개별 게시판은 막고, 그룹게시판은 허용하는 형태인데, 그러면 안되는 것이 아닌가요???
그래서 저는 변수를 새로 지정하게 했어요. 안그러면 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' ";
$_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);
}
---
// 포인트 삭제
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' ");
그것을 못하게 하려면, 앞부분에 아래 코드를 추가하면 됩니다.
if ($mb[mb_id] == $config[cf_admin])
alert("최고관리자의 권한은 제한할 수 없습니다.");
보안문제 때문에 맨날 골머리..특히 중국 크래커들!!
아무튼 감사히 잘쓰겠습니다^^
// XSS (Cross Site Script) 막기 부분에서
$content = preg_replace("/(on)([^\=]+)/i", "on$2", $content);
위와 같은 코드가 있던데 cheditor에서 그림을 삽입하면 파일명이 자동으로 바뀌면서
Hkwj5AeeoNxRMic.jpg
위와같이 난수로 저장을 하는데..
중간에 "oN"이 포함되어 있는 경우에 on으로 인식, 코드를 바꿔버려서 그림이 정상적으로 출력이 안됩니다.
에러난 원인을 한참 찾던중에 철자 on은 "on$2" 로 바꿔버리는데 대소문자 구별없이 on을 바꿔버려서 oN 이 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);
}