Аттачи (вложения) к тикетам.

Уместное предупреждение.

Предварительно следует оговориться, что приём от пользователя файла, да ещё и с последующим сохранением его на сервере - процедура критичная, которую всеми силами предписано избегать. Ибо под видом картинки может быть подсунуто нечто более затейливое, что вкупе с каким-нибудь малоизвестным эксплойтом способно хакнуть Ваш сайт, а то и хостера целиком.

Причём это не страшилки, так оно обычно и делается.
Наши сайты полны логов с такими попытками.
В логах обычно можно видеть имена всяких визуальных редакторов.

В связи с чем боязливый Вебмастер отключает аттачи к тикетам вот такой записью в файле настроек, о которой речь ранее уже заходила:

   'att'    => 0,                # Максимальный размер аттача в килобайтах.

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

Немножко паранойи.

Поскольку автор скрипта хорошо себе представляет угрозы, создаваемые пользовательскими файлами на хосте, приём аттачей от пользователей проистекает несколько странным способом. Вы должны понимать, почему оно именно так:

  1. Файлы графических форматов детектируются по их mime-типу после загрузки во временную директорию, и силами PHP и стандартной GD библиотеки реинкарнируются в папке с аттачами, но исключительно в формате .jpg

    Как показала практика, на шаред хостингах так можно поступать с .jpg и .png изображениями, а вот .gif конвертируется далеко не везде. Поэтому с ним не работаем.

    Сами исходные файлы на хостинг не перемещаются, так что вся метаинформация, и прочий зловредный код, потенциально могущий в них быть, погибают.

  2. Конвертирование идёт с качеством 80%.
    Размеры исходного и конечного файлов могут не совпасть.

  3. Исходные имена файлов заменяются на случайные.
    В URL-е изображений эти имена также не фигурируют.

  4. Сама папка с аттачами изолирована.
    То есть картинки оттуда напрямую в принципе не запускаются.

  5. Естественно, URL картинки работает только под авторизацией.

  6. На всякий случай GET отключен для всей системы тикетов.
    POST работает исключительно через специальный интерпретатор.

Для файлов .pdf и .zip форматов такой геноцид устроить сложно.
Они третируются меньше.

Во избежание хакерских экзерсисов, при попытке загрузить в Тикетовую Нану неправомочного аттача, она не выдаст никаких сообщений, и никакой диагностики. Неправомочный аттач просто исчезнет, как будто и не прикладывался к тикету. В большинстве случаев никакого криминала в этом нет, просто пользователь превысил разрешённый объём аттача - формой загрузки он чётко оговорен. Но если там какой-то иной нюанс, Тикетовая Нана о нём будет молчать рыбой об лёд.

Как работать с аттачами.

Пользователь может приложить к тикету только один аттач.
Нужно больше - пусть их зипует.
Либо создаёт серию тикетов.

При удалении Пользователем своего тикета, либо Администратором не актуального более тикета Пользователя, вложение к тикету уничтожается вместе с самим тикетом.

Клик в аттач приводит к разным последствиям.

Если аттач является изображением, оно в виде превьюшки просматривается ниже тикета. При клике изображение открывается в новом окне в полный размер, причём он в точности равен оригинальному размеру (мы помним, что на сервере сохраняются не оригинальные изображения Пользователя, а копии, снятые с оригиналов силами примитивов PHP, что делается для секьюритетности и избавления изображений от дополнительных тел с зловредным кодом, а также прочих не интересных нам метаданных).

Если аттач является архивом .zip, либо .pdf файлом, клик по его иконке инициирует скачивание файла на компьютер. Имя файла при этом будет случайным.

Сами иконки хранятся в ./i/ticket/, и могут быть заменены любыми другими.