[관리자님]오전에 언급한 거 관련해서
코멘트로 남기겠습니다.
댓글 12개
letsgolee
14년 전
윈도우 서버의 경우 이미지 파일이 문제가 아니라 사이트 전체를 날릴 수 있습니다. 넘어오는 값에 역슬레쉬로 경로를 설정하게 되면 가능해집니다. 사안이 중대한 것 같습니다. 일단 delete.php를 실행되지 않도록 막는 것이 중요할 것 같네요.
예: localhost/gnuboard4/cheditor5/imageUpload/delete.php?img=/..\..\..\dbconfig.php
예: localhost/gnuboard4/cheditor5/imageUpload/delete.php?img=/..\..\..\dbconfig.php
14년 전
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;
?>
이렇게 수정해 보았습니다.
확인이 가능하신지요?
//$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;
?>
이렇게 수정해 보았습니다.
확인이 가능하신지요?
letsgolee
14년 전
답변이 늦었습니다. 이건 어떤가요?
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;
그런데 이것의 문제는 사용자가 항상 아이피가 같을 가능성이 많지 않다는 겁니다.
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;
그런데 이것의 문제는 사용자가 항상 아이피가 같을 가능성이 많지 않다는 겁니다.
14년 전
어차피 삭제는 이미지를 올리는 경우에만 가능합니다.
아이피가 다를 이유가 없습니다.
tiff 는 모르겠는데 bmp 는 용량이 큰 관계로 빼는것이 좋을것 같습니다.
CHEDITOR 에서도 gif, png, jpe?g 만 가능합니다.
아이피가 다를 이유가 없습니다.
tiff 는 모르겠는데 bmp 는 용량이 큰 관계로 빼는것이 좋을것 같습니다.
CHEDITOR 에서도 gif, png, jpe?g 만 가능합니다.
letsgolee
14년 전
아이피를 파일 이름에 사용하는 건 위험하지 않을까 싶습니다. 파일 올린 사람의 아이피를 공개하는 것과 같으니까요... 굳이 사용해야 한다면 적어도 md5로 바꾸어주어야 하지 않을까요? 하지만 이것도 완벽한 것은 아닙니다. 테이블을 만들면가능합니다. ^^/
letsgolee
14년 전
이런 방법도 있습니다.
새글 작성시에 세션을 설정해서 delete.php에서 그 세션을 요구하게 하는 방법이있고 수정시에는 delete.php에 bo_table과 wr_id를 같이 넘겨서 작성자가 맞는 경우나 어드민인 경우를 확인한 후에 지우게 하는 방법이 있습니다.
새글 작성시에 세션을 설정해서 delete.php에서 그 세션을 요구하게 하는 방법이있고 수정시에는 delete.php에 bo_table과 wr_id를 같이 넘겨서 작성자가 맞는 경우나 어드민인 경우를 확인한 후에 지우게 하는 방법이 있습니다.
letsgolee
14년 전
살펴보니 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에 없는 것들을 삭제하는 루틴을 만들 수도 있습니다...
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에 없는 것들을 삭제하는 루틴을 만들 수도 있습니다...
게시판 목록
자유게시판
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 공지 |
|
1주 전 | 12 | |
| 199718 |
|
1주 전 | 9 | |
| 199717 | 3주 전 | 22 | ||
| 199716 |
느긋한카키쿠키
|
3주 전 | 17 | |
| 199715 |
현대적인무질서한까마귀
|
3주 전 | 20 | |
| 199714 | 3주 전 | 26 | ||
| 199713 | 3주 전 | 33 | ||
| 199712 | 1개월 전 | 292 | ||
| 199711 |
안졸리니졸리니
|
1개월 전 | 144 | |
| 199710 |
|
1개월 전 | 160 | |
| 199709 |
|
1개월 전 | 92 | |
| 199708 | 1개월 전 | 106 | ||
| 199707 | 1개월 전 | 240 | ||
| 199706 | 1개월 전 | 41 | ||
| 199705 | 1개월 전 | 29 | ||
| 199704 | 1개월 전 | 47 | ||
| 199703 | 2개월 전 | 57 | ||
| 199702 | 2개월 전 | 97 | ||
| 199701 | 2개월 전 | 111 | ||
| 199700 | 2개월 전 | 83 | ||
| 199699 | 2개월 전 | 88 | ||
| 199698 | 2개월 전 | 135 | ||
| 199697 | 2개월 전 | 99 | ||
| 199696 |
|
2개월 전 | 247 | |
| 199695 | 2개월 전 | 89 | ||
| 199694 | 2개월 전 | 119 | ||
| 199693 | 2개월 전 | 185 | ||
| 199692 | 2개월 전 | 198 | ||
| 199691 |
|
2개월 전 | 170 | |
| 199690 | 2개월 전 | 258 | ||
| 199689 | 2개월 전 | 160 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기