[보안패치] 그누보드 4.22.06
4.22.06 (08.09.07)
: geditor에서 이미지 업로드시 이미지 확장자만 업로드 가능하도록 수정
geditor/upload.php
geditor 에서 php, html 등의 확장자 업로드가 가능한 것을 이미지 확장자 gif, png, jpg, jpeg 만 가능하도록 수정하였습니다.
data/geditor 디렉토리로 이동하여 이미 업로드 된 php 파일이 있는지 확인하여 주십시오.
find . -name '*.php'
or
find . -name '*.htm'
있다면 모두 삭제하여 주시기 바랍니다.
업로드 된 파일이 있다고 하더라도 geditor 에서 파일명을 변조하여 업로드 하므로 큰 피해는 없으리라 예상됩니다.
: geditor에서 이미지 업로드시 이미지 확장자만 업로드 가능하도록 수정
geditor/upload.php
geditor 에서 php, html 등의 확장자 업로드가 가능한 것을 이미지 확장자 gif, png, jpg, jpeg 만 가능하도록 수정하였습니다.
data/geditor 디렉토리로 이동하여 이미 업로드 된 php 파일이 있는지 확인하여 주십시오.
find . -name '*.php'
or
find . -name '*.htm'
있다면 모두 삭제하여 주시기 바랍니다.
업로드 된 파일이 있다고 하더라도 geditor 에서 파일명을 변조하여 업로드 하므로 큰 피해는 없으리라 예상됩니다.
첨부파일
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 30개
수고하셧습니다 ㅎ
좋은 자료 감사합니다. 잘 쓰겠습니다. ^^
geditor/upload.php
덮어 쓰니 이미지 업로드가 안되네요. 어디 다른부분에도 패치가 된 사항이 있나요?
### 수정된내용이
alert_only 함수 명을 alert로 변경하고
if (!preg_match("/\.(gif|png|jp[e]?g)$/i", $file[name]))
alert("PNG, GIF, JPG 형식의 이미지 파일만 업로드 가능합니다.");
추가한사항말구 다른 부분이 존재 하나요..
###
왜안되지.ㅠ,.ㅠ
다운로드 파일은 새로운 파일로 업데이트 해 놓았습니다.
이미 업데이트 하신 분들은
geditor/upload.php 를 아래와 같은 코드로 대체하여 주십시오.
<?
include_once("./_common.php");
// --
// 첨부 이미지 저장 디렉토리
// --
$path = "$g4[path]/data/$g4[geditor]";
// --
make_dir($path);
$obj = $_POST[obj];
$token = $_POST[token];
$work = $_POST[work];
if (!$token) exit;
if (!$obj)
alert_only('오브젝트 변수가 없습니다.');
if ($work == 'delete') {
delete_image($token, $path.'/'.date('ym'));
exit;
}
$file = $_FILES[image];
$size = getImageSize($file[tmp_name]);
$mime = array('image/png', 'image/jpeg', 'image/gif');
if (!is_uploaded_file($file[tmp_name]))
alert_only("첨부파일이 업로드되지 않았습니다.\\n\\n$file[error]");
if (!preg_match("/\.(gif|png|jp[e]?g)$/i", $file[name]))
alert_only("PNG, GIF, JPG 형식의 이미지 파일만 업로드 가능합니다.");
if (!in_array($size['mime'], $mime))
alert_only("PNG, GIF, JPG 형식의 이미지 파일만 업로드 가능합니다..");
if (!is_dir($path))
alert_only("$path 디렉토리가 존재하지 않습니다.");
if (!is_writable($path))
alert_only("$path 디렉토리의 퍼미션을 707로 변경해주세요.");
add_index($path);
$path .= '/'.date('ym');
make_dir($path);
delete_image($token, $path);
$dest_file = $path.'/'.abs(ip2long($_SERVER[REMOTE_ADDR])).'_'.substr(md5(uniqid($g4[server_time])),0,8).'_'.str_replace('%', '', urlencode($file[name]));
$count = 0;
while (file_exists($dest_file))
$dest_file = $path.'/['.$count++.']'.$file[name];
move_uploaded_file($file[tmp_name], $dest_file);
chmod($dest_file, 0606);
$file = dirname($HTTP_SERVER_VARS["PHP_SELF"]).'/'.$dest_file;
setCookie('ge_token', $token);
setCookie('ge_file', $dest_file);
function add_index($path) {
$indexfile = $path."/index.php";
$f = @fopen($indexfile, "w");
@fwrite($f, "");
@fclose($f);
@chmod($indexfile, 0606);
}
function delete_image($token, $path) {
global $_COOKIE;
if ($token==$_COOKIE[ge_token]) {
if (substr($_COOKIE[ge_file], 0, strlen($path))==$path) {
if (file_exists($_COOKIE[ge_file])) {
@unlink($_COOKIE[ge_file]);
}
}
}
}
function alert_only($msg='', $url='') {
echo "<script language='javascript'>alert('$msg'); </script>";
exit;
}
function make_dir($path)
{
if (!is_dir($path))
{
@mkdir($path, 0707);
@chmod($path, 0707);
if (!is_dir($path))
alert_only('디렉토리 생성에 실패하였습니다.');
add_index($path);
}
}
?>
<script language="javascript">
parent.<?=$obj?>.insert_image_preview("<?=$file?>");
</script>
이름과 별명이 한글자만 나오는데 왜 그런가요?
대부분의 이미지 스킨에서 섬네일은 thumb , 최근게시물은 latest_thumb 이렇게 생성하고 있습니다.
따라서 아래의 내용을 패치에 추가시킨다면 향후 이용에 편리함이 커질것이라 생각됩니다.
관련링크 : http://www.sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=2296
현재 그누보드4는 게시글을 삭제하면 첨부파일은 삭제가 되는데 섬네일은 삭제가 안되더군요..
섬네일까지 깨끗하게 삭제하는 방법은 의외로 간단합니다..
보통 섬네일이 만들어지는것을 보면 문서아이디로 만들어지더군요..
그 디렉토리를 찾아가서 삭제하도록 만들어 봤습니다.
1. bbs/delete.php 파일의 75번줄 부근
@unlink("$g4[path]/data/file/$bo_table/$row2[bf_file]"); // 검색후 바로 아래 추가 .......
@unlink("$g4[path]/data/file/$bo_table/thumb/$write[wr_id]"); //썸네일 삭제
@unlink("$g4[path]/data/file/$bo_table/latest_thumb/$write[wr_id]"); //최근게시물 썸네일 삭제
2. bbs/delete_all.php 파일의 92번줄 부근
@unlink("$g4[path]/data/file/$bo_table/$row2[bf_file]"); // 검색후 바로 아래 추가 .......
@unlink("$g4[path]/data/file/$bo_table/thumb/$write[wr_id]"); //썸네일 삭제
@unlink("$g4[path]/data/file/$bo_table/latest_thumb/$write[wr_id]"); //최근게시물 썸네일 삭제
3. bbs/write_update.php 파일의 120줄 부근
@unlink("$g4[path]/data/file/$bo_table/$row[bf_file]"); // 검색후 바로 아래 추가 .......
@unlink("$g4[path]/data/file/$bo_table/thumb/$write[wr_id]"); //썸네일 삭제
@unlink("$g4[path]/data/file/$bo_table/latest_thumb/$write[wr_id]"); //최근게시물 썸네일 삭제
4. bbs/write_update.php 파일의 158번줄 부근
@unlink("$g4[path]/data/file/$bo_table/$row[bf_file]"); // 검색후 바로 아래 추가 .......
@unlink("$g4[path]/data/file/$bo_table/thumb/$write[wr_id]"); //썸네일 삭제
@unlink("$g4[path]/data/file/$bo_table/latest_thumb/$write[wr_id]"); //최근게시물 썸네일 삭제
위의 소스를 추가로 넣어주시면 게시글 삭제시 섬네일까지 깨끗하게 삭제가 됩니다...
첨부이미지 교체시에도 섬네일이 바로 교체 됩니다...
단, 섬네일 파일의 폴더명을 다르게 만든 스킨을 사용했을경우는 그에 맞게 위의 소스도
@unlink("$g4[path]/data/file/$bo_table/섬네일 폴더/$write[wr_id]"); //썸네일 삭제
@unlink("$g4[path]/data/file/$bo_table/최근게시물섬네일폴더/$write[wr_id]"); //최근게시물 썸네일 삭제
이런방식으로 변경해줘야 합니다.
썸네일이 바뀌질 않아 왜 그러나 했습니다.
감사합니다.
-.-; 코드 이렇게 저렇게 만지다 보니까 되긴 했는데, 두번째로 해서는 안되네요; (기억이 안나요 죄송 ㅠ)
이전버젼으로 다운해서 사용중입니다. :)
MYSQL5 에서는 $id = '' 이런 형식의 코드를 사용할수 없습니다!