2011-03-20 3 views
1

어떻게하면 내 서버에 php/html 파일이 업로드되지 않도록 할 수 있습니까? 이 코드는 지금까지 가지고 있지만 작동하지 않습니다.PHP - imags에 업로드 된 파일 필터링

<?php 
$target = "upload/"; 
$target = $target . basename($_FILES['uploaded']['name']) ; 
$ok=1; 

//This is our size condition 
if ($uploaded_size > 35000) 
{ 
echo "Your file is too large.<br>"; 
$ok=0; 
} 

//This is our limit file type condition 
if ($uploaded_type =="text/php") 
{ 
echo "No PHP files<br>"; 
$ok=0; 
} 

//Here we check that $ok was not set to 0 by an error 
if ($ok==0) 
{ 
Echo "Sorry your file was not uploaded"; 
} 

//If everything is ok we try to upload it 
else 
{ 
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 
{ 
echo "The file ". basename($_FILES['uploadedfile']['name']). " has been uploaded and will be revied by moderators. You will recieve points based on the review."; 
} 
else 
{ 
echo "Sorry, there was a problem uploading your file."; 
} 
} 
?> 
+0

어디'$의 uploaded_size'을받을 수 있나요? – alex

+0

'$ uploaded_type'은 어디에 설정합니까? 그 가치는 무엇입니까? –

답변

1

귀하의 코드는 당신이 그런 짓을하지 않으면 NULL이됩니다 예를 들어, 설정되지 않은 변수 $uploaded_size ... 또한

$uploaded_size = $_FILES['uploaded']['size']; 

를 사용의 MIME을 확인하는 말에 너무 큰되지 않습니다 당신은 파일이 PHP를 가지고 있는지 여부. 단지 php 확장자 (즉, type$_FILES에 검사하는 경우)입니다.

보안을 위해 docroot 외부로 업로드를 이동하고 Apache가 악성 파일을 실행하지 못하도록 확장명을 변경하고 이름을 삭제하십시오. 원래 파일 이름과 유형은 (아마도 해쉬 된) 새 이름을 참조하여 데이터베이스에 안전하게 저장할 수 있습니다.

또한 나중에 항상 수있는 image/gif MIME과 이미지에 포함 된 경우에도, readfile()하지 PHP 코드를 실행 include 뭔가를 (사용하여 콘텐츠를 에코 당신이 콘텐츠를 스트리밍하는 경우 보장 할 수 있습니다 GIF 헤더가 포함 된 경우 GIF라고 말함).