첨부파일 관련 질문 드립니다.
본문
안녕하세요 게시판에서 첨부파일을 올릴때 서버단 파일 및 php 그리고 asp 등 이런 파일들은 못 올리게 하고 싶습니다.
그런데 현제 게시판에서 이런 파일들도 다 올라가더라구요 혹시 이거 제한 하려면 어떻게 하는지 알려 주시면 감사 드리겠습니다.
write.skin.php 파일 상단에 아래와 같이 했구요 그런데 테스트 해보니 여전히 서버단 파일이들이 올라거숑 못 올라가게 하고 싶어서요
제가 잘 모르다 보니 GPT를 좀 활용을 했는데 안되서요
<?
// 파일 확장자 및 MIME 타입 체크 함수
function check_uploaded_file($filename) {
$allowed_extensions = array('jpg', 'jpeg', 'png', 'gif', 'pdf', 'docx', 'xlsx'); // 허용할 확장자 목록
$file_extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
return in_array($file_extension, $allowed_extensions);
}
function check_mime_type($tmp_name) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $tmp_name);
finfo_close($finfo);
$allowed_mime_types = array('image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
return in_array($mime_type, $allowed_mime_types);
}
?>
<?php if ($is_file) { ?>
<div class="form-group clearfix">
<div class='row'>
<label class="col-md-2 control-label hidden-xs">첨부파일</label>
<div class="col-md-10">
<p class="form-control-static text-muted" style="padding:0px; padding-top:10px;">
<span class="cursor" onclick="add_file();"><i class="fa fa-plus-circle fa-lg"></i> 파일추가</span>
<span class="cursor" onclick="del_file();"><i class="fa fa-times-circle fa-lg"></i> 파일삭제</span>
</p>
<table id="variableFiles" class='table'></table>
</div>
</div>
</div>
<script>
var flen = 0;
function add_file(delete_code) {
var upload_count = <?php echo (int)$board['bo_upload_count']; ?>;
if (upload_count && flen >= upload_count) {
alert("이 게시판은 "+upload_count+"개 까지만 파일 업로드가 가능합니다.");
return;
}
var objTbl;
var objNum;
var objRow;
var objCell;
var objContent;
if (document.getElementById)
objTbl = document.getElementById("variableFiles");
else
objTbl = document.all["variableFiles"];
objNum = objTbl.rows.length;
objRow = objTbl.insertRow(objNum);
objCell = objRow.insertCell(0);
objContent = "<div class='row'>";
objContent += "<div class='col-md-7'><div class='form-group'><div class='input-group input-group-sm'><span class='input-group-addon'>파일 "+(objNum+1)+"</span><input type='file' class='form-control form-control-sm' name='bf_file[]' title='파일 용량 <?php echo $upload_max_filesize; ?> 이하만 업로드 가능'></div></div></div>";
if (delete_code) {
objContent += delete_code;
} else {
<?php if ($is_file_content) { ?>
objContent += "<div class='col-md-5'><div class='form-group'><input type='text'name='bf_content[]' class='form-control form-control-sm' placeholder='이미지에 대한 내용을 입력하세요.'></div></div>";
<?php } ?>
;
}
objContent += "</div>";
objCell.innerHTML = objContent;
flen++;
}
<?php
echo $file_script; //수정시에 필요한 스크립트
?>
function del_file() {
// file_length 이하로는 필드가 삭제되지 않아야 합니다.
var file_length = <?php echo (int)$file_length; ?>;
var objTbl = document.getElementById("variableFiles");
if (objTbl.rows.length - 1 > file_length) {
objTbl.deleteRow(objTbl.rows.length - 1);
flen--;
}
}
</script>
<?php } ?>
<?php
$upload_dir = '/path/to/upload/directory/';
foreach ($_FILES['bf_file']['name'] as $i => $file) {
if ($_FILES['bf_file']['error'][$i] == 0) {
$file_name = $_FILES['bf_file']['name'][$i];
$tmp_name = $_FILES['bf_file']['tmp_name'][$i];
// 확장자 및 MIME 타입 검사
if (check_uploaded_file($file_name) && check_mime_type($tmp_name)) {
$new_filename = uniqid() . '.' . pathinfo($file_name, PATHINFO_EXTENSION);
if (!move_uploaded_file($tmp_name, $upload_dir . $new_filename)) {
echo "<script>alert('파일 업로드에 실패했습니다.');</script>";
exit;
}
} else {
echo "<script>alert('허용되지 않은 파일 형식입니다.');</script>";
exit;
}
} elseif ($_FILES['bf_file']['error'][$i] != UPLOAD_ERR_OK) {
echo "<script>alert('파일 업로드 중 오류가 발생했습니다.');</script>";
exit;
}
}
?>
답변 1
소스를 write.skin.php 에 넣으시면 안되고 /bbs/write.php 에 넣으셔야 합니다.
그리고 좀 커스텀 해야 할 필요가 있네요.
그리고 Chatgpt 같은 경우 코드는 예제를 주는것이지 바로 적용하면 99% 적용이 안되거나 에러가 발생합니다.
이 질답을 참고해보시기 바랍니다.
bbs/write_update.php 파일 수정
if (is_uploaded_file($tmp_file)) {
위 코드 밑에 추가
if(preg_match("/\.(php|asp|jsp)$/i", $filename)) {
$file_upload_msg .= '\"'.$filename.'\" 해당 파일은 업로드가 불가능합니다.\\n';
continue;
}
이외에 다른 확장자도 처리하시려면 php|asp|jsp|exe|php3 이런식으로 늘리시면 됩니다.
!-->
답변을 작성하시기 전에 로그인 해주세요.