2015-07-29 2 views
0

У меня есть сценарий загрузки файлов, как показано ниже (upload.php). Как я могу догадаться, кто-то может написать скрипт, который отправляет 1000+ файлов в upload.php за небольшой промежуток времени.Как защитить от атаки загрузки файлов в php?

Итак, как защитить себя от многочисленных попыток загрузки файлов?

<?php 
    if (!empty($_FILES)) { 
     $ds = DIRECTORY_SEPARATOR; 
     $storeFolder = 'uploads'; 

     $rand_dir = rand(1, 1000); 
     $targetPath = realpath(dirname(__FILE__) . '/..') . $ds . $storeFolder . $ds . $rand_dir . $ds; 
     $targetPath_clean = $storeFolder . $ds . $rand_dir . $ds; 

     if (!file_exists($targetPath)) 
      mkdir($targetPath, 0777, true); 

     $filename = date('YmdHis_') . generateRandomString() . '.' . pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); 

     move_uploaded_file($_FILES['file']['tmp_name'], $targetPath . $filename); 
     echo $targetPath_clean . $filename; 
    } else { 
     die('access denied'); 
    } 
?> 
+0

невозможно. php не запускается до ПОСЛЕ завершения загрузки. в буквальном смысле вы ничего не можете сделать в php, чтобы предотвратить проблему. –

+0

http://stackoverflow.com/questions/9813556/count-and-limit-the-number-of-files-uploaded-html-file-input –

+0

Что делать, если 1000+ законных пользователей пытаются отправить файл в файл upload.php в то же время ? – frz3993

ответ

1

Это зависит от того, чего вы хотите достичь.

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

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

Смежные вопросы