1 / 26

Лекция 4

Лекция 4. Загрузка файлов по протоколу HTTP. Загрузка файлов на сервер. Загрузка файлов на сервер осуществляется пользователями сети интернет довольно часто: Веб-интерфейсы почтовых сервисов Интерактивные фотогалереи и фотоальбомы

nemo
Download Presentation

Лекция 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Лекция 4 Загрузка файлов по протоколу HTTP

  2. Загрузка файлов на сервер Загрузка файлов на сервер осуществляется пользователями сети интернет довольно часто: • Веб-интерфейсы почтовых сервисов • Интерактивные фотогалереи и фотоальбомы • Порталы бесплатного программного обеспечения, которые используют для обмена файлами различных программ и т.д.

  3. MIME • MIME (произн. «майм», англ. MultipurposeInternetMailExtensions — многоцелевые расширения интернет-почты) — спецификация для кодирования информации и форматирования сообщений таким образом, чтобы их можно было пересылать по Интернету. • Формат MIME поддерживает передачу нескольких сущностей в пределах одного сообщения. • Для обозначения множественного содержимого используются медиатипы, обозначающие составные типы данных: multipart/*.

  4. Некоторые MIME-типы Внутренний формат прикладной программы: • application/json: JavaScript Object Notation JSON • application/javascript: JavaScript • application/octet-stream: двоичный файл без указания формата • application/ogg: Ogg • application/pdf: Portable Document Format, PDF • application/postscript: PostScript • application/xhtml+xml: XHTML • application/zip: ZIP • application/x-gzip: Gzip

  5. Некоторые MIME-типы Аудио: • audio/mp4: MP4 • audio/mpeg: MP3 или др. MPEG • audio/ogg: OggVorbis, Speex, Flacили др. аудио • audio/vnd.wave: WAV Видео: • video/mpeg: MPEG-1 • video/mp4: MP4 • video/ogg: OggTheoraили другое видео • video/quicktime: QuickTime • video/x-flv: FLV

  6. Некоторые MIME-типы Изображения: • image/gif: GIF • image/jpeg: JPEG • image/pjpeg: JPEG • image/png: Portable Network Graphics • image/svg+xml: SVG • image/tiff: TIFF

  7. Причины появления MIME MIME расширяет функционал электронной почты (а впоследствии и протокола HTTP) для поддержки: • Текстовых данных в кодировках, отличных от ASCII • Не текстовых вложений • Тел заголовков с множественным содержимым

  8. Множественное содержимое • Множественное содержимое (Multipart Content) – наличие больше одного типа данных в едином теле запроса. • Перед каждой порцией содержимого обязан быть разделитель (boundary), представляющий собой случайный набор символов латиницы. • Наименование разделителя указывается в заголовке Content-Typeв основном заголовке запроса.

  9. Множественное содержимое --Asrf456BGe4h Content-Disposition: form-data; name="MessageText" (пустая строка) Привет, Василий! Твой ручной лев, которого ты оставил у меня на прошлой неделе, разодрал весь мой диван. Пожалуйста забери его скорее! Во вложении две фотки с последствиями. --Asrf456BGe4h Content-Disposition: form-data; name="AttachedFile1"; filename="horror-photo-1.jpg" Content-Type: image/jpeg (пустая строка) (двоичное содержимое первой фотографии) (отсутствующий эпилог - пустая строка) POST /send-message.html HTTP/1.1 Host: webmail.example.com Referer: http://webmail.example.com/send-message.html User-Agent: BrowserForDummies/4.67b Content-Type: multipart/form-data; boundary=Asrf456BGe4h Content-Length: (суммарный объём, включая дочерние заголовки) Connection: keep-alive Keep-Alive: 300 (пустая строка) (отсутствующая преамбула) --Asrf456BGe4h Content-Disposition: form-data; name="DestAddress" (пустая строка) brutal-vasya@example.com --Asrf456BGe4h Content-Disposition: form-data; name="MessageTitle" (пустая строка) Я негодую

  10. Атрибут enctypeу форм • Определяет способ кодирования данных формы при их отправке на сервер. Обычно устанавливать значение атрибута enctype не требуется. Однако если используется поле для отправки файла (inputtype="file"), следует определить атрибут enctype как multipart/form-data.

  11. Атрибут enctypeу форм • application/x-www-form-urlencoded • Вместо пробелов ставится +, символы в нестандартных кодировках (например на кириллице) кодируются их шестнадцатеричными значениями (например, %D0%90%D0%BD%D1%8F вместо Аня). • multipart/form-data • Данные не кодируются. Это значение применяется при отправке файлов. • text/plain • Пробелы заменяются знаком +, буквы и другие символы не кодируются.

  12. Multipart-формы • Загрузка файлов на сервер осуществляется с помощью multipart-формы, в которой есть поле загрузки файла. В качестве атрибута enctype указывается значение multipart/form-data.

  13. Поле для ввода файла HTML-код поля для ввода имени файла, который будет загружен на Web-сервер выглядит так: • <input type="file" name="myFile"> В браузере будет отображаться так:

  14. Общий вид формы загрузки файла <formaction="upload.php"method="POST"enctype="multipart/form-data"> <inputtype="file"name="myFile"> <inputtype="submit"value="Загрузить"> </form>

  15. Обработка файла на сервере • PHP-интерпретатор, получив файл на сервере, сохраняет его во временную директорию (обычно /tmp, но зависит от типа ОС и настроек PHP). • Во временной директории файл хранится под новым уникальным именем. • После завершения работы скрипта, временный файл будет удалён.

  16. Индексы массива $_FILES[‘myFile’] Для каждого файла в среде PHP создаётся глобальный массив $_FILES[имя_файлового_поля], в котором существует пять индексов. • $_FILES['myFile']['name'] - имя файла до его отправки на сервер, например, pict.gif; • $_FILES['myFile']['size'] - размер принятого файла в байтах; • $_FILES['myFile']['type'] - MIME-тип принятого файла (если браузер смог его определить), например: image/gif, image/png, image/jpeg, text/html; • $_FILES['myFile']['tmp_name']- содержит имя файла во временном каталоге, например: /tmp/phpV3b3qY; • $_FILES['myFile']['error'] - Код ошибки, которая может возникнуть при загрузке файла. Ключ ['error'] был добавлен в PHP 4.2.0. С соответствующими кодами ошибок вы можете ознакомиться здесь

  17. Перемещение временного файла boolmove_uploaded_file(string $filename, string $destination) • Функция проверяет, является ли файл filename загруженным на сервер (переданным по протоколу HTTP POST). Если файл действительно загружен на сервер, он будет перемещён в место, указанное в аргументе destination.

  18. Скрипт загрузки файла <?php $uploaddir='/var/www/uploads/'; $uploadfile=$uploaddir.basename($_FILES['myFile']['name']); echo'<pre>'; if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadfile)){ echo"Файл корректен и был успешно загружен.\n"; }else{ echo"Возможная атака с помощью файловой загрузки!\n"; } echo'Некоторая отладочная информация:'; print_r($_FILES); print"</pre>"; ?>

  19. Функции для работы с файлами

  20. Функция basename stringbasename ( string $path [, string $suffix ] ) • При передаче строки с путем к файлу или каталогу, данная функция вернет последний компонент имени из данного пути.

  21. Функция basename <?php echo"1) ".basename("/etc/sudoers.d",".d").PHP_EOL; echo"2) ".basename("/etc/passwd").PHP_EOL; echo"3) ".basename("/etc/").PHP_EOL; echo"4) ".basename(".").PHP_EOL; echo"5) ".basename("/"); ?> Результат выполнения: • sudoers • passwd • etc • .

  22. Функция dirname stringdirname ( string $path ) Получив строку, содержащую путь к файлу или каталогу, функция возвратит родительский каталог данного пути. <?php echo"1) ".dirname("/etc/passwd").PHP_EOL; // 1) /etc echo"2) ".dirname("/etc/").PHP_EOL; // 2) / (или \ на Windows) echo"3) ".dirname("."); // 3) . ?>

  23. Функция realpath stringrealpath( string $path ) Раскрывает все символические ссылки, переходы типа '/./', '/../' и лишние символы '/' в пути path, возвращая канонизированный абсолютный путь к файлу. <?php chdir('/var/www/'); echorealpath('./../../etc/passwd'); ?> Результат: /etc/passwd

  24. Функции прав доступа, групп и владельцев

  25. Переменная $mode у функции chmod <?phpchmod("/somedir/somefile", 755);   // десятичное, скорее всего, указано неверноchmod("/somedir/somefile", "u+rwx, go+rx");  //строка, неверный способchmod("/somedir/somefile", 0755);  // восьмеричное, верный способ?>

  26. Лабораторная работа • Написать скрипт, позволяющий загружать несколько файлов в отдельную директорию на сервере. Выбрать MIME-тип содержимого и максимальный размер. • Создать скрипт для вывода файлов на экран с возможностью удаления любого файла. • Предусмотреть защиту от взлома.

More Related