테스트 사이트 - 개발 중인 베타 버전입니다

[관리자님]오전에 언급한 거 관련해서

코멘트로 남기겠습니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 12개

윈도우 서버의 경우 이미지 파일이 문제가 아니라 사이트 전체를 날릴 수 있습니다. 넘어오는 값에 역슬레쉬로 경로를 설정하게 되면 가능해집니다. 사안이 중대한 것 같습니다. 일단 delete.php를 실행되지 않도록 막는 것이 중요할 것 같네요.

예: localhost/gnuboard4/cheditor5/imageUpload/delete.php?img=/..\..\..\dbconfig.php
내용 확인 했습니다.
알려주셔서 감사합니다.
cheditor5/imageUpload/upload.php 를 아래와 같이 수정하고

//$random_name = random_generator() . $ext;
$random_name = abs(ip2long($_SERVER['REMOTE_ADDR'])) . '_' . random_generator() . $ext;




cheditor5/imageUpload/delete.php 를

<?php
require_once("_config.php");
// ---------------------------------------------------------------------------

$delete = trim($_GET['img']);

// 파일의 경로에서 파일명만 얻어낸다. \ 나 / 는 제거된다.
preg_match('/[0-9a-z_]+\.(gif|png|jpe?g)$/i', $delete, $m);
$delete = $m[0];

// 파일의 아이피 부분만 잘라내서 자신의 아이피인지 비교한다.
list($ip2long, $filename) = explode('_', $delete);
if ($ip2long != abs(ip2long($_SERVER['REMOTE_ADDR']))) die(false);

$filepath = sprintf("%s/%s", SAVE_DIR, $delete);

$r = unlink($filepath);

echo $r ? true : false;
?>

이렇게 수정해 보았습니다.


확인이 가능하신지요?
답변이 늦었습니다. 이건 어떤가요?


require_once("_config.php");

$delete = basename(trim($_GET['img']));

if (preg_match('/^[0-9a-z_]+\.(gif|png|jpe?g|tiff?|bmp)$/i', $delete, $dump)) {

// 파일의 아이피 부분만 잘라내서 자신의 아이피인지 비교한다.
list($ip2long, $filename) = explode('_', $delete);
if ($ip2long != abs(ip2long($_SERVER['REMOTE_ADDR']))) die(false);

$filepath = sprintf("%s/%s", SAVE_DIR, $delete);

$r = unlink($filepath);

echo $r ? true : false;
}
else echo false;


그런데 이것의 문제는 사용자가 항상 아이피가 같을 가능성이 많지 않다는 겁니다.
어차피 삭제는 이미지를 올리는 경우에만 가능합니다.
아이피가 다를 이유가 없습니다.
tiff 는 모르겠는데 bmp 는 용량이 큰 관계로 빼는것이 좋을것 같습니다.
CHEDITOR 에서도 gif, png, jpe?g 만 가능합니다.
아이피를 파일 이름에 사용하는 건 위험하지 않을까 싶습니다. 파일 올린 사람의 아이피를 공개하는 것과 같으니까요... 굳이 사용해야 한다면 적어도 md5로 바꾸어주어야 하지 않을까요? 하지만 이것도 완벽한 것은 아닙니다. 테이블을 만들면가능합니다. ^^/
왜?!!! md5 생각을 못했을까요?
오늘중으로 패치해서 올리도록 하겠습니다.
감사합니다.
이런 방법도 있습니다.

새글 작성시에 세션을 설정해서 delete.php에서 그 세션을 요구하게 하는 방법이있고 수정시에는 delete.php에 bo_table과 wr_id를 같이 넘겨서 작성자가 맞는 경우나 어드민인 경우를 확인한 후에 지우게 하는 방법이 있습니다.
움...
살펴보니 delete.php는 새글 사용에만 사용되네요... 그래서 세션을 이용해서 만들어 보았습니다...

1. bbs/write.php:
=================

다음을 찾은 후:
include_once("$g4[path]/head.sub.php");

그 앞에 다음을 추가: * 반드시 그 앞 줄에 넣으세요. 뒷줄이 아닙니다 *
$_SESSION['imageUploads'] = array(
'agent'=>md5($_SERVER['HTTP_USER_AGENT']),
'ip'=>md5($_SERVER['REMOTE_ADDR']),
'images'=>array()
);
// 혹은 set_session('imageUploads', array(...)); 식으로 해도 된다.

2. bbs/write_update.php:
========================

다음을 찾은 후:
@include_once("$board_skin_path/write_update.tail.skin.php");

그 다음 줄에 추가:
unset($_SESSION['imageUploads']);// 혹은 set_session('imageUloads', null);로 해도 된다.

3. cheditor5/imageUpload/upload.php:
====================================

다음을 찾은 후
echo $rdata;

그 앞에 다음을 추가: * 반드시 그 앞 줄에 넣으세요. 뒷줄이 아닙니다 *
$_SESSION['imageUploads'][images][] = $random_name;


4. cheditor5/imageUpload/delete.php:
<?php

require_once("_config.php");
// ---------------------------------------------------------------------------

$delete = basename(trim($_GET['img']));

if (!preg_match('/^[0-9a-z_]+\.(gif|png|jpe?g|tiff?)$/i', $delete, $dump)) die(false);

$filepath = sprintf("%s/%s", SAVE_DIR, $delete);

if (!$member['mb_id'] ||
!$_SESSION['imageUploads'] ||
$_SESSION['imageUploads']['agent'] != md5($_SERVER['HTTP_USER_AGENT']) ||
$_SESSION['imageUploads'['ip'] != md5($_SERVER['REMOTE_ADDR']) ||
!in_array($delete, $_SESSION['imageUploads']['images'])
) die(false);

$r = unlink($filepath);

echo $r ? true : false;

?>

이렇게 세션을 이용하면 write_update.php에서 $wr_content에 <img>태그 확인해서 $_SESSION['imageUploads']['images']에 등록된 이미지들 중 $wr_content에 없는 것들을 삭제하는 루틴을 만들 수도 있습니다...
에디터가 새글에서만 사용되는것이 아니라서 전부 수정하자면 부담이 큽니다. ㅜㅜ
그렇네요... 생각해보니... 관리자 페이지에서도...

게시판 목록

자유게시판

글쓰기

첫글

3주 전
🐛 버그신고