PmWikiRu /
ПожалуйÑта ÑкÑпериментируйте в пеÑочнице!Управление закачками

PmWiki включает Ñценарий называемый upload.php позволÑющий пользователÑм закачивать файлы на вики Ñервер пользуÑÑÑŒ веб броузером. Закачаные файлы (по другому называемые вложениÑ) могут быть легко доÑтупны в помощью разметки на вики Ñтраницах. Эта Ñтраница раÑÑказываетÑÑ ÐºÐ°Ðº уÑтановить и наÑтроить функцию закачки.

Ðекоторые Ð·Ð°Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾ поводу безопаÑноÑти

ОтноÑительно функции закачки PmWiki занимает отчаÑти параноидальную позу. СоответÑтвенно, наÑтройки по умолчанию Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ñ‡ÐµÐº Ñ‚Ñготеют к Ñтремлению ограничить Ñту функцию как можно Ñильнее:

  • Закачка по умолчанию запрещена
  • Даже еÑли её разрешить, она защищена паролем
  • Даже еÑли убрать пароль, вы ограничены закачкой файлов Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ именами и раÑширениÑми(типами)
  • Символы применÑемые в именах закачиваемых файлов (по умолчанию) Ñто: буквы, минуÑ, подчёркивание, точка и пробел.
  • МакÑимальный размер закачиваемого файла веÑьма мал (по умолчанию 50K)

Ð’ таком иÑполнении возможноÑÑ‚ÑŒ повреждений ограничена пока/еÑли админиÑтратор вики Ñвно не оÑлабит ограничениÑ.

Имейте в виду, что позволение пользователÑм (анонимно!) закачивать файлы на ваш веб Ñервер влечёт за Ñобой некоторую долю риÑка. Сценарий upload.php Ñпециально разработан Ð´Ð»Ñ ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка, но админиÑтраторы вики должны знать, что Ð¿Ð¾Ñ‚ÐµÐ½Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ ÑƒÑзвимоÑÑ‚ÑŒ ÑущеÑтвует, и что раÑÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑƒÑ‚Ð¸Ð»Ð¸Ñ‚Ñ‹ закачки может иметь нежелательные поÑледÑтвиÑ.

Изначально, авторизованым пользователÑм разрешена перезапиÑÑŒ файлов до того уже закачаных без мозможноÑти воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ верÑии файла. ЕÑли вы хотите запретить пользователÑм перезапиÑывать файлы добавьте Ñледующую Ñтроку в config.php:

$EnableUploadOverwrite = 0;

По другому, админиÑтратор может Ñохранить предыдущие верÑии закачек.

Также админиÑтратор может наÑтроить PmWiki так, чтобы механизм паролей управлÑл доÑтупом к закачаным файлам.

Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ ÑƒÑтановка

ЕÑли Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ $EnableUpload в config.php не равна нулю, то stdconfig.php автоматичеÑки подключает Ñценарий upload.php. К тому же, папка Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ñ‡Ð¸Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² и URL Ñтой папки на Ñервере можно уÑтановить переменными $UploadDir и $UploadUrlFmt в config.php. Изначально, $UploadDir и $UploadUrlFmt предполагают, что закачаные файлы хранÑÑ‚ÑÑ Ð² папке Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ uploads/ в текущей папке (обычно Ñодержащую единÑтвенный pmwiki.php). Ко вÑему прочему, config.php также уÑтанавливает начальный пароль закачки (Ñмотри ÐдминиÑтрирование паролей).

Таким образом, оÑновной config.php Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ñ‡ÐµÐº может выглÑдеть так:

<?php if (!defined('PmWiki')) exit();
##  Enable uploads and set a site-wide default upload password.
$EnableUpload = 1;
$DefaultPasswords['upload'] = crypt('secret');

Важно: Ðе Ñоздавайте пока папку uploads. Читайте Ñледующий параграф.

Вам может понадобитьÑÑ Ñвно уÑтановить папку Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ñ‡ÐµÐº и указать URL отвечающий за Ñту папку:

$UploadDir = "/home/john/public_html/uploads";
$UploadUrlFmt = [="http://www.john.com/~john/uploads";=]

Закачки могут быть наÑтроены переменной $UploadPrefixFmt Ð´Ð»Ñ Ð²Ñего Ñайта, погруппно или поÑтранично. Она указывает будут ли вÑе закачки хранитьÑÑ Ð² одной папке, или в отдельной папке Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ группы или в отдельной папке каждой Ñтраницы. По умолчанию, закачка организована погруппно.

Закачки Ð´Ð»Ñ Ð²Ñего Ñайта делаютÑÑ Ñ‚Ð°Ðº:

$UploadPrefixFmt = '';

Чтобы Ñделать закачку поÑтраничной, воÑпользуйтеÑÑŒ одним из двух вариантов:

$UploadPrefixFmt = '/$FullName';
$UploadPrefixFmt = '/$Group/$Name';

Папка закачек

Чтобы Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ¸ работала хорошо, папка ÑƒÐºÐ°Ð·Ð°Ð½Ð°Ñ Ð² $UploadDir должна быть запиÑываемой Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑа веб Ñервера и желательно, чтобы она была доÑтупна через веб (например, в папке public_html). Выполнение PmWiki Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹Ð¼Ð¸ закачками выведет приглашение Ñ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñлением шагов требуемых Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¿ÐºÐ¸ закачек на вашем Ñервере(оно отличаетÑÑ Ð¾Ñ‚ Ñервера к Ñерверу).

Закачивание файлов

С тех пор как Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ¸ включена, пользователи получают доÑтуп к диалогу закачке поÑредÑтвом припиÑÑ‹Ð²Ð°Ð½Ð¸Ñ "?action=upload" в конец обычного URL PmWiki. Пользователю будет предлагатьÑÑ Ð²Ð²ÐµÑти пароль закачки подобно паролÑм Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… Ñтраниц (об уÑтановке паролей на Ñтраницы, группы, и веÑÑŒ Ñайт Ñмотри Пароли и ÐдминиÑтрирование паролей).

Другой ÑпоÑоб получить диалог закачки - Ñто вÑтавить разметку "Attach:filename.ext" на ÑущеÑтвующую Ñтраницу, где filename.ext Ñто Ð¸Ð¼Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ файла Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ñ‡Ð¸Ð²Ð°Ð½Ð¸Ñ. Когда Ñтраница будет показана, '?-ÑÑылка' будет добавлена в конце разметки Ð´Ð»Ñ Ð´Ð¾Ñтупа автора к Ñтранице закачки.

Изначально, PmWiki раÑпределÑет закачаные файлы по отдельным папка Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ группы. Это можно изменить поправив переменную $UploadPrefixFmt. Подробнее читай Cookbook:UploadGroups.

Сохранение верÑий закачаных файлов

Изначально, PmWiki не поддерживает Ñохранение верÑий закачаных файлов. Однако, уÑтановив $EnableUploadVersions=1; админиÑтратор может включить Ñохранение Ñтарых верÑий закачаных файлов в папке Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ñ‡Ð°Ð½Ñ‹Ñ… файлов на равне Ñ Ð¾Ñтальными верÑиÑми.

Ограничение закачки файлов Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿ и Ñтраниц

ПользуÑÑÑŒ подÑтройкой по группам закачка файлов может быть включена только Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ñ‹Ñ… групп или Ñтраниц. ПроÑто уÑтановите $EnableUpload=1; Ð´Ð»Ñ Ñ‚ÐµÑ… групп или Ñтраниц, в которых вы желаете включить закачку; или же уÑтановите $EnableUpload=1; в файле config.php и уÑтановите $EnableUpload=0; в файлах подÑтройки групп или Ñтраниц, где вы хотите запретить закачку.

Ограничение закачки файлов по типам и размеру

Прежде чем Ñохранить закачаный файл в папку закачек Ñценарий выполнÑет Ñ€Ñд проверок. ОÑновные проверки опиÑаны ниже:

Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°
Ð¸Ð¼Ñ Ð·Ð°ÐºÐ°Ñ‡Ð°Ð½Ð¾Ð³Ð¾ файла может Ñодержать только буквы, цифры, подÑифрой.
тип файла
Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ñ‡Ð¸Ð²Ð°Ð½Ð¸Ñ Ð½Ð° веб Ñервер разрешены файлы только определённых типов, таких как ".gif", ".jpeg", ".doc", и пр. Это жизненно важно Ð´Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑти Ñервера, так как веб Ñервер может попытатьÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ или обработать файлы Ñ Ñ€Ð°ÑширениÑми вроде ".php", ".cgi" и Ñ‚.п.
размер файла
Изначально вÑе закачки ограничены 50-ÑŽ килобайтами, что определÑетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ $UploadMaxSize. Таким образом, Ð´Ð»Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° вÑех закачек Ñотней килобайт проÑто укажите новое значение Ð´Ð»Ñ $UploadMaxSize в config.php:
$UploadMaxSize = 102400;

Кроме того, наибольший размер файла также может быть указан Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ типа закачиваемого файла. СоответÑтвенно, админиÑтратор может ограничить размер файлов ".gif" и ".jpeg" 20-ÑŽ килобайтами, а вÑе оÑтальные типы размером из переменной $UploadMaxSize. МаÑÑив $UploadExtSize иÑпользуетÑÑ Ð´Ð»Ñ ÑƒÑтановки допуÑтимых типов файлов и их макÑимального размера (в байтах). Ðапример:

$UploadExtSize['gif'] = 20480; # ограничить .gif файлы до 20K

УÑтановка запиÑи в ноль Ñовершенно запрещает закачивать файлы Ñтого типа:

$UploadExtSize['zip'] = 0; # запретить .zip файлы

Добавление новых типов файлов к ÑпиÑку разрешённых

Чтобы добавить новый тип в ÑпиÑок разрешённых типов файлов добавьте Ñтрочку подобную Ñледующей в файл наÑтройки:

$UploadExts['ext'] = 'content-type';

где ext Ñто добавлÑемое раÑширение файла и content-type Ñто тип Ñодержимого (MIME тип) применÑемый к файлам Ñ Ñ‚Ð°ÐºÐ¸Ð¼ раÑширением. К примеру, Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ 'dxf' Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ Ñодержимого 'image/x-dxf' добавьте Ñтроку:

$UploadExts['dxf'] = 'image/x-dxf';

ÐšÐ°Ð¶Ð´Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в $UploadExts должна быть раÑширением и mime-типов аÑÑоциируемым Ñ Ñтим раÑширением, например так:

$UploadExts = array(
  'gif' => 'image/gif',
  'jpeg' => 'image/jpeg',
  'jpg' => 'image/jpeg',
  'png' => 'image/png',
  'xxx' => 'yyyy/zzz'
)

Ðет необходимоÑти указывать в Ñтом ÑпиÑке типы файлов, которые PmWiki уже знает (Ñценарий upload.php добавлÑет ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸Ñ PmWiki Ð´Ð»Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ админиÑтративной поддержки).

Другой предел размера файла

ЕÑли и другие дейÑтвующие факторы оказывающие влиÑние на размер закачиваемого файла. Ð’ Apache 2.0 еÑÑ‚ÑŒ директива LimitRequestBody управлÑÑŽÑ‰Ð°Ñ Ð¼Ð°ÐºÑимальным размеров вÑего что поÑлано(posted)(Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÑƒ файлов). Apache по умолчанию Ñчитает Ñтот размер неограниченым. Однако, некоторые диÑтрибутивы Linux (в Ñ‚.ч. Red Had Linux) ограничивает поÑылку 512 килобайтами, что требует Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ увеличениÑ. (Обычно Ñти наÑтройки находÑÑ‚ÑÑ Ð² файле конфигурации httpd.conf или в файле /etc/httpd/conf.d.)

Проблема Ð¾Ñ‚Ð¼ÐµÑ‡ÐµÐ½Ð°Ñ Ð² Red Hat 8.0/9.0 Ñ Apache 2.0.x определÑетÑÑ ÐºÐ°Ðº ошибка "Requested content-length of 670955 is larger than the configured limit of 524288" и выглÑдит в броузере как "Page not found"(Ñтраница не найдена). Попытка изменить указаные выше наÑтройки не помогает Ñ PHP, Ñ‚.к. у Red Hat 8.0/9.0 еÑÑ‚ÑŒ дополнительный файл наÑтроек Ð´Ð»Ñ PHP /etc/httpd/conf.d/php.conf. Увеличение чиÑла в Ñтроке "LimitRequestBody 524288" решает Ñту проблему.

PHP Ñам по Ñебе имеет два Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð½Ð° закачку файла (чаÑто раÑположеные в /etc/php.ini). Первое - Ñто параметр upload_max_filesize уÑтановленый по умолчанию в 2M. Второй -- post_max_size Ñо значением по умолчанию 6Ðœ.

МакÑимальный размер закачиваемого файла определÑетÑÑ Ð¸Ð· наименьшего Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñреди трёх переменных: PmWiki наибольший размер файла, предел размера запроÑа Apache и параметр размера файла PHP.

Защита паролем закачаных файлов

УÑтановка Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ð° проÑмотр Ð´Ð»Ñ Ñтраниц(или групп) предотвращает проÑмотр и доÑтуп к файлам Ñтраницы, но Ð´Ð»Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¿Ñ€Ñмого доÑтупа к файлам (в папке uploads/) надо Ñделать Ñледующее:

  • в local/config.php уÑтановить $EnableDirectDownload=0;
  • Запретить доÑтуп к папке uploads/ поÑредÑтвом Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐµÑ‘ за пределы дерева директорий html/ или public_html/, или Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ файла .htaccess.

Смотри Cookbook:SecureAttachments.

Другие замечаниÑ

  • ЕÑли закачки вÑÑ‘ ещё не работают, убедитеÑÑŒ что ваш уÑтановленый PHP позволÑет закачки. Файл php.ini(чаÑто /etc/php.ini или /usr/local/lib/php.ini) должен Ñодержать
file_uploads = On

Заметьте, что еÑли вы измените Ñто значение, httpd(веб Ñервер) должен быть перезапущен(restart). Другой ÑпоÑоб проверить разрешённоÑÑ‚ÑŒ закачек на Ñервере Ñто уÑтановить $EnableDiag в 1 (config.php) и вызвать любую Ñтраницу Ñ ?action=phpinfo в URL. ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ "file_uploads" должна иметь значение 1 (еÑли её значение "no value", то Ñто значит - выключено).

<< ÐдминиÑтрирование паролей | Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ | ИнтернационализаÑÐ¸Ñ >>

Как мне запретить закачку файлов определённого типа?

Вот пример чего надо добавить в ваш файл local/config.php Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€ÐµÑ‚Ð° Ð·Ð°ÐºÐ°Ñ‡Ð°Ð²Ð°Ð½Ð¸Ñ .zip файлов:

$UploadExtSize['zip'] = 0; # Запрет закачки .zip файлов.

Перевод Ñтраницы PmWiki.UploadsAdmin - Оригинал перевода PmWikiRu.UploadsAdmin - Backlinks
PmWikiRu.UploadsAdmin: Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð¾Ñ‚ 02.05.2006 08:45 Uhr
PmWiki.UploadsAdmin: Ñ€µÐ´Ð°ÐºÑ†Ð¸Ñ от 27.02.2023 13:34 Uhr

Seite zuletzt geändert am 02.05.2006 08:45 Uhr