2013-07-05 3 views
0
<?php 

    if($_POST){ 

     $imagentipo=$_FILES['imagen']['type']; 
     $check=array("image/gif","image/jpeg","image/png"); 

     if(in_array($imagentipo,$check)){ 
      $imagen=$_FILES['imagen']['name']; 
      $temp=$_FILES['imagen']['tmp_name']; 
      move_uploaded_file($temp,$imagen); 
     } 
    } 
?> 
<html> 
<body> 
    <form action=test.php method=post enctype=multipart/form-data> 
     <img src="<?php echo $imagen ?>" width=50 height=50><br> 
     <input type=file name=imagen accept="image/*"><br> 
     <input type=submit name=lol> 
    </form> 
</body> 
</html> 

Этот код допускает только: .jpg .gif .png файлы для загрузки; однако это может быть обойдено с помощью данных вмешательства. Любые способы предотвратить это?Как защитить эту загрузку php от LFI

+0

Хотите попробовать недействительные загрузки, дезинфицировать все файлы, или комбинацию обоих? (Sanitizing часто проще/быстрее, чем обнаружение.) –

+0

Чтобы быть уязвимым для LFI (включение локального файла), вам нужно включить файл в свой скрипт (как указано в названии). – nickb

+0

@nickb: это неверно. Если вы можете читать, например,/etc/passwd, это все равно включение файла, даже если оно не выполняется. – Chris

ответ

1

Переместить загруженные файлы за пределы веб-корня и использовать функции из библиотеки обработки изображений, чтобы проверить, действительно ли загруженный файл является изображением. Как Imagick:

try{ 
    $image = new Imagick($filePath); 
}catch(Exception $e){ 
    // fail 
} 

Если у вас нет Imagick:

if(getimagesize($filePath) === false){ 
    // fail... 
} 
Смежные вопросы