Загрузка файлов на сервер является очень важным скриптом на сайте, так как от него в большую часть зависит безопасность вашего сайта. Если мы не уделим должного внимание к процессу загрузки файлов, то есть, не будем подвергать файл строгим проверкам на его расширение, размер и т.д. то злоумышленник сможет загрузить вредоносный скрипт, тем самым удалит или получит доступ к закрытым файлам и данным.
Для чего используется данный скрипт?
- Профиль пользователя (загрузка собственной картинки - аватара)
- Баннерная реклама (Загрузка флеш или графического баннера)
- Онлайн фото галерея (Не будем же мы для очередной фотографии заходить по FTP, нужно автоматизировать процесс сделав загрузку изображении через админку)
- Офисная свалка (Загрузка отчетов или других важных документов формата: doc, pdf, djvu...)
Все сводится к одному и тому же - загрузка файла на сервер.
Какие файлы не нужно допускать к загрузке ?
Без вашего ведома не должны допускаться к загрузке файлы которые выполняют программный код.
Злоумышленник загрузит так называемый скрипт "Backdoor - Черный вход" и у него появится древо всех папок и файлов на вашем сервере, он сможет открывать и редактировать все файлы на сервере(конечно если нет ограничение прав пользователей) если он получит доступ к конфигурационному файлу базы данных то он получит данные для подключения к ней.
Расширения которые не должны позволяться к загрузке со стороны обычного пользователя
php, cgi, pl, php3, php4, php5, php6, phps, phtml, shtml, py, exe
Как предотвратить выполнение скриптов если хакер смог загрузить файл?
Для этого нам понадобится помощь .htaccess он не позволит запуск скриптов расширение которых находится в списке запрещенных (1. Смотрим код ниже.) (2. Данный пример подходит для сайтов на Apache)
Теоретическая часть закончена, подходим к просмотру скриптов изнутри.
Иерархия файлов и папок данного скрипта
Файл upload.html - Содержит обыкновенную форму загрузки файла на сервер.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Загрузка файла на сервер - PHP</title> </head> <body> <h2 align='center'>Загрузка файла на сервер</h2> <form method="post" name="upload_form" action="upload.php" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="5242880" /> <p align='center'>Максимальный размер файла: 5 мб. <input name="uploaded_file" type="file"/><input type="submit"/></p> </form> </body> </html> |
Обратите внимание на встроенную переменную MAX_FILE_SIZE, она указывает максимально допустимый размер загружаемого файла в байтах. Не стоит на ней рассчитывать, HTML форму можно легко подделать и отправить PHP скрипту файл который не прошел проверку со стороны браузера.
Думаете, что живые комментарии в Инстаграм купить нереально? Тогда советуем Вам почитать данный материал на pricesmm.com. Здесь Вы узнаете, какие виды комментов добавляют сайты и где найти наиболее дешевый и качественный вариант.
Файл upload.php берет на себя главную роль в загрузке файла на сервер.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php /* * Загрузка файла на сервер * Автор: Mowshon (Live-code.ru) * Дата: 11.11.13 */ // Максимально допустимый размер загружаемого файла - 5Мб $MaxFileSizeInBytes = 5242880; // Разрешение расширения файлов для загрузки $AllowFileExtension = array('jpg', 'png', 'jpeg', 'gif', 'rar', 'zip', 'doc', 'pdf', 'djvu'); // Оригинальное название файла $FileName = $_FILES['uploaded_file']['name']; // Полный путь до временного файла $TempName = $_FILES['uploaded_file']['tmp_name']; // Папка где будут загружатся файлы $UploadDir = "uploads/"; // Полный путь к новому файлу в папке сервера $NewFilePatch = $UploadDir.$FileName; if($FileName) { // Проверка если расширение файла находится в массиве доступных $FileExtension = pathinfo($FileName, PATHINFO_EXTENSION); if(!in_array($FileExtension, $AllowFileExtension)) { echo "Файлы с расширением {$FileExtension} не допускаются"; } else { // Проверка размера файла if(filesize($TempName) > $MaxFileSizeInBytes) { echo "Размер загружаемого файла превышает 5МБ"; } else { // Проверяем права доступа на папку if(!is_writable($UploadDir)) { echo "Папка ".$UploadDir." не имеет прав на запись"; } else { // Копируем содержимое временного файла $TempName и создаем нового в папке сервера $CopyFile = copy($TempName, $NewFilePatch); if(!$CopyFile) { echo "Возникла ошибка, файл не удалось загрузить!"; } else { echo "Файл успешно загружен!<br />Ссылка на файл: <a href='{$NewFilePatch}'>{$NewFilePatch}</a>"; } } } } } ?> |
Я постарался предельно понятнее назвать переменные и комментировать их для читателей не знающих английского языка. Если не будет ясен определенный участок кода, задавайте вопросы в комментариях ниже.
Файл .htaccess из папки uploads запрещает выполнение файлов с определенным расширением.
1 2 3 4 |
<FilesMatch "\.(php|cgi|pl|php3|php4|php5|php6|phps|phtml|shtml|py)$"> Order allow,deny Deny from all </FilesMatch> |
>> Скачать скрипт из статьи
Все появившейся вопросы задавайте в комментариях ниже. Буду рад объяснить все непонятные моменты. Благодарю за внимание!