PHP - фильтрация загруженных файлов в imags - PullRequest
1 голос
/ 20 марта 2011

как я могу убедиться, что файлы php / html не загружены на мой сервер?это мой код, который у меня есть, но он не работает.

<?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."; 
 } 
 } 
 ?> 

Ответы [ 2 ]

1 голос
/ 20 марта 2011

Check http://www.php.net/manual/en/function.exif-imagetype.php - проверяет определенные магические числа, которые есть у всех JPG в начале.Кроме того, как уже отмечали другие, вы используете неопределенные переменные ... ознакомьтесь с учебником по PHP для загрузки файлов (который также документирует содержимое $ _FILE).

http://www.php.net/manual/en/features.file-upload.post-method.php

1 голос
/ 20 марта 2011

Ваш код использует переменные, которые не установлены, например, $uploaded_size, которые будут равны NULL, если вы не сделаете что-то вроде ...

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

Кроме того, проверка MIME не слишком хороша, чтобы сказать вам, есть ли у файла PHP или нет. Это просто означает, что у него есть расширение php (то есть, если вы проверяете type в $_FILES).

В целях безопасности переместите загрузки за пределы документа, переименуйте и удалите любое расширение (чтобы Apache не пытался запустить какой-либо вредоносный файл). Исходное имя файла и тип могут быть безопасно сохранены в базе данных со ссылкой на (возможно, хэшированное) новое имя.

Возможно, вы также захотите убедиться, что вы выполняете потоковую передачу содержимого позже, чтобы всегда отображать содержимое, используя readfile(), а не что-то вроде include (которое будет запускать ваш PHP-код, даже если оно встроено в изображение с image/gif MIME, который можно сказать, что это GIF, если он включает заголовок GIF).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...