묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
파일첨부 제한 할려면 어떻게 해야 되나요?
2003.05.01 07:53
초보라서 잘 모르겠습니다.
해킹의 우려가 있어서
php, html 등의 파일을 첨부 하지 못하게 할려면
어떻게 고쳐 줘야 되는지요? 모르니깐 답답하군요..........-.-;
한 수 가르쳐 주세요...
==========================================================
<?php
require "../inc/config.php3";
function error($reason) {
echo " <script>
window.alert('$reason')
history.go(-1)
</script>";
exit;
}
if (!pub) { error('어떤 게시판을 사용합니까? 게시판을 선택하세요'); }
if($email) {
if (!ereg("([a-zA-Z0-9,_,-]{2,15})@([a-zA-Z0-9,_,-]{2,15}).([a-zA-Z0-9,_,-]{2,15})",$email,$regs))
{error('E-Mail을 올바르게 기록하세요'); }
}
if (!$subject) { error('글 제목을 입력해 주세요'); }
if (!$comment) {error('글 내용을 입력해 주세요'); }
if($userfile_name) {
if (file_exists("./files/$userfile_name")) {error('동일한 파일이 존재합니다.');}
}
if($action=="ans"||!$action) {
if(!$depth){
$dbresult = mysql_query("select num from board where title='pub' order by num desc",$dbconn);
// $filenum = mysql_num_rows($dbresult1);
mysql_data_seek($dbresult,0);
$row=mysql_fetch_array($dbresult);
$depth = $row[num]+1;
$main = "$depth";
}else {$main = "0";}
if($action=="ans"){
$ques = "select email,name from board where title='pub' and num='$num'";
$results = mysql_query($ques, $dbconn);
$rows = mysql_fetch_row($results);
if($rows[0]) {
$text = "답변 등록됨n$rows[1] 님이 등록한 글에 대한 답이 등록되었습니다.n$home_url 을 방문하시어 글을 확인하세요";
mail("$rows[0]","답변이 등록됨","$text","From: $admin_mail");
}
}
if($userfile_name){
$temp = $userfile_name;
/**
//2001.11.13 수정전 코드.
copy($userfile, "./files/$temp");
chmod("./files/$temp");
unlink($userfile);
**/
//2001.11.13 수정,추가 ->
$filepath = "./files/$temp";
if(!copy($userfile, $filepath )){
echo "<script> alert("파일업로드가 실패하였습니다.");</script>";
unset( $userfile_name );
}
if (file_exists( $filepath )){
chmod("$filepath",0777); // 파일권한 변경(사용자 읽기만 가능;보완땜시)
}
// <- 2001.11.13 추가.
unlink($userfile);
}
$comment = htmlspecialchars($comment);
$subject = htmlspecialchars($subject);
$comment = nl2br(addslashes($comment));
$comment = str_replace("'","''",$comment);
$subject = str_replace("'","''",$subject);
$dbinsert = mysql_query("insert into board(num,title,name,subject,email,depth,comment,rdate,view,main,userfile,passwd,ip) values('','pub','$name','$subject','$email','$depth','$comment',now(),'0','$main','$userfile_name','$passwd','$ip')",$dbconn);
}
if($action=="mod") {
$comment = htmlspecialchars($comment);
$subject = htmlspecialchars($subject);
//2001.11.14 추가된 코드
$crnl = Chr(13).Chr( 10 );
$comment = str_replace( $crnl , "<br>", $comment);
//<-2001.11.14 추가된 코드
//수정전 코드
//$comment = nl2br(addslashes($comment));
$dbinsert = mysql_query("update board set title='pub',name='+ '+ '$name',subject='$subject',email='$email',comment='$comment',passwd='$passwd' where num='$num' ",$dbconn);
}
echo "<meta http-equiv='Refresh' content='0; URL=./index.php3?btitle=pub&page=$page&upload=$upload'>";
exit;
mysql_close($dbconn);
?>
<p> </p>
해킹의 우려가 있어서
php, html 등의 파일을 첨부 하지 못하게 할려면
어떻게 고쳐 줘야 되는지요? 모르니깐 답답하군요..........-.-;
한 수 가르쳐 주세요...
==========================================================
<?php
require "../inc/config.php3";
function error($reason) {
echo " <script>
window.alert('$reason')
history.go(-1)
</script>";
exit;
}
if (!pub) { error('어떤 게시판을 사용합니까? 게시판을 선택하세요'); }
if($email) {
if (!ereg("([a-zA-Z0-9,_,-]{2,15})@([a-zA-Z0-9,_,-]{2,15}).([a-zA-Z0-9,_,-]{2,15})",$email,$regs))
{error('E-Mail을 올바르게 기록하세요'); }
}
if (!$subject) { error('글 제목을 입력해 주세요'); }
if (!$comment) {error('글 내용을 입력해 주세요'); }
if($userfile_name) {
if (file_exists("./files/$userfile_name")) {error('동일한 파일이 존재합니다.');}
}
if($action=="ans"||!$action) {
if(!$depth){
$dbresult = mysql_query("select num from board where title='pub' order by num desc",$dbconn);
// $filenum = mysql_num_rows($dbresult1);
mysql_data_seek($dbresult,0);
$row=mysql_fetch_array($dbresult);
$depth = $row[num]+1;
$main = "$depth";
}else {$main = "0";}
if($action=="ans"){
$ques = "select email,name from board where title='pub' and num='$num'";
$results = mysql_query($ques, $dbconn);
$rows = mysql_fetch_row($results);
if($rows[0]) {
$text = "답변 등록됨n$rows[1] 님이 등록한 글에 대한 답이 등록되었습니다.n$home_url 을 방문하시어 글을 확인하세요";
mail("$rows[0]","답변이 등록됨","$text","From: $admin_mail");
}
}
if($userfile_name){
$temp = $userfile_name;
/**
//2001.11.13 수정전 코드.
copy($userfile, "./files/$temp");
chmod("./files/$temp");
unlink($userfile);
**/
//2001.11.13 수정,추가 ->
$filepath = "./files/$temp";
if(!copy($userfile, $filepath )){
echo "<script> alert("파일업로드가 실패하였습니다.");</script>";
unset( $userfile_name );
}
if (file_exists( $filepath )){
chmod("$filepath",0777); // 파일권한 변경(사용자 읽기만 가능;보완땜시)
}
// <- 2001.11.13 추가.
unlink($userfile);
}
$comment = htmlspecialchars($comment);
$subject = htmlspecialchars($subject);
$comment = nl2br(addslashes($comment));
$comment = str_replace("'","''",$comment);
$subject = str_replace("'","''",$subject);
$dbinsert = mysql_query("insert into board(num,title,name,subject,email,depth,comment,rdate,view,main,userfile,passwd,ip) values('','pub','$name','$subject','$email','$depth','$comment',now(),'0','$main','$userfile_name','$passwd','$ip')",$dbconn);
}
if($action=="mod") {
$comment = htmlspecialchars($comment);
$subject = htmlspecialchars($subject);
//2001.11.14 추가된 코드
$crnl = Chr(13).Chr( 10 );
$comment = str_replace( $crnl , "<br>", $comment);
//<-2001.11.14 추가된 코드
//수정전 코드
//$comment = nl2br(addslashes($comment));
$dbinsert = mysql_query("update board set title='pub',name='+ '+ '$name',subject='$subject',email='$email',comment='$comment',passwd='$passwd' where num='$num' ",$dbconn);
}
echo "<meta http-equiv='Refresh' content='0; URL=./index.php3?btitle=pub&page=$page&upload=$upload'>";
exit;
mysql_close($dbconn);
?>
<p> </p>
댓글 2
-
구름
2003.05.01 15:28
-
특급잠수부
2003.05.01 22:47
보통 enctype=multipart/form-data 를 쓰시면
<input type=file name=upfile> 하셨을때
$upfile_type 이라는 전역변수가 생깁니다.
이것을 이용하셔서 제한하는것도 좋습니다.
만약에 이미지만 업로드 제한하신다면 호스팅사에 부탁하셔서 exif를 이용하시는 것도 괜찮습니다.
보통의 경우 tmp 디렉토리로 업로드 된다음 copy 하거나 mv하는 형식이니깐
파일의 헤더를 읽어서 리턴값으로 제한하는 것도 괜찮습니다.
$file_type = $filecheck[count($filecheck)-1];
if($file_type == "php" || $file_type == "html" || $file_type == "htm" || $file_type == "inc" || $file_type == "php3" || $file_type == "cgi" || $file_type == "shtml" || $file_type == "phtml" || $file_type == "asp" || $file_type == "pl" || $file_type == "bak"){ unlink($upload); err_msg("올바르지 않은 파일타입입니다.");}
이런 식이라고나..