CGI - Временные файлы

Я разрабатываю небольшое приложение CGI (на C, с CGIC, http://www.boutell.com/cgic/). Моему приложению необходимо создать временный файл (пользователь загружает изображения, они сохраняются, изменяются различными способами, а затем показываются пользователю).

Какие меры предосторожности следует предпринять при создании временных файлов?

Модифицированный образ предоставляется динамически сценарием CGI, который затем удаляет временный файл с диска:

Что-то вроде того:<html><head><title>here's your modified image</title></head><body><img src="cgi-bin/genimage.cgi?uid=5423423 /></body>

Однако злонамеренный пользователь может загрузить изображение и никогда не запрашивать измененное изображение, поэтому заполняет жесткий диск.

Стоит ли периодически удалять неиспользуемые файлы?

Большое спасибо!

2 ответа

Решение

Если объем вашего хранилища ограничен и вы получаете неизвестный объем поступающих данных, вам нужно решить, что делать, когда есть больше данных, которые вы можете сохранить. Это придет так или иначе. Если вы притворяетесь, что предоставляете неограниченное хранилище, тогда будет DoS, когда вы не сможете.

Любая стратегия, вероятно, подпадает под следующие два (3, если возможно) пути:

Когда выше отметки уровня воды,

  1. удалить самые старые / наименее желаемые данные, чтобы освободить место
  2. отбрасывать входящие данные, чтобы избежать переполнения
  3. приостанавливать поступающие данные до тех пор, пока они не станут ниже отметки уровня

2 и 3 вам все равно понадобится как-то найти новое хранилище, поэтому что-то придется либо удалить, либо вам понадобится больше памяти. 1 довольно самодостаточен, но может быть возможно удалить из него все полезные старые данные, отправив достаточно нового мусора. Создание системы ранжирования (последний доступ, наиболее доступный, загруженный привилегированным пользователем, объединение этих...) и удаление наименее важных может быть наилучшей сбалансированной вещью.

Использование CGI для прямого проектирования приложений сомнительно, т. Е. Не веб-фреймворк / механизм приложений. Я бы предложил использовать Java для манипулирования изображениями или обернуть его в lua, python или что-то в этом роде.

Если вы продолжите работу с C, убедитесь, что вы ограничиваете среду выполнения CGI, поместите ее в тюрьму, проверьте этот пост на предмет вдохновения, вот еще один.

Другие вопросы по тегам