NEX1ON 0.7.0
Медиа-библиотека
Хранилище файлов в ядре: папки, уменьшенные копии, поиск, подписи для незрячих и строгие правила приёма чужих файлов.
Медиа-библиотека — часть ядра, а не модуль. Модуль можно выключить, хранилище файлов — нельзя: как только на картинку сослалась хоть одна запись, отключение означало бы битые ссылки по всему сайту.
Правила приёма файлов
Приём чужого файла — самое опасное место любого сайта, поэтому правила жёсткие:- Имя файла на диске придумывает движок. Присланное имя хранится только для показа.
- Тип читается из содержимого, а не из расширения, и они обязаны совпасть.
- Расширения — по белому списку, а не по списку запрещённых: список опасных всегда неполон.
- Картинки пересобираются заново. Файл может быть настоящим JPEG и работающим кодом одновременно; после пересборки остаются только пиксели.
- В папке загрузок ничего не исполняется: запрет для Apache, образец для nginx и такой же запрет на сервере разработки.
Картинки ограничены по числу точек, а не по весу файла: файл в пару килобайт может развернуться в памяти в гигабайты.
Что умеет
Папки, поиск, отбор по виду, подпись для незрячих у каждого файла, уменьшенные копии, повторный файл не задваивается, корзина вместо удаления с диска, свои права. SVG выключен по умолчанию — с объяснением почему.Исправлено
- Блок Directory в .htaccess Apache не принимает — это ошибка 500 на весь сайт. Защита загрузок перенесена в саму папку.
- Встроенный сервер PHP не читает .htaccess и выполнял файл из загрузок. Разработка не должна вести себя мягче рабочего сервера — запрет продублирован.