Последствия безопасности записи файлов с помощью PHP

Я в настоящее время пытаюсь создать CMS с помощью PHP, просто в интересах образования. Я хочу, чтобы администраторы смогли создать содержание, которое будет анализироваться и экономиться серверное хранилище в чистой HTML-форме для предотвращения издержек, которым выполняющий Сценарий PHP подвергся бы. К сожалению, я мог только думать о нескольких способах сделать так:

  • Установка разрешения записи на каждом каталоге, где CMS должен хотеть записать файл. Это походит вполне на плохую идею.
  • Установка полномочий записи на сингле cached каталог. Сценарий PHP мог затем include или fopen/fread/echo содержание из файла в cached каталог в разовом запросом. Это могло, возможно, быть выполнено способом Mediawiki-esque: что-то как index.php?page=xyz мог считать и повторить содержание от cached/xyz.html во времени выполнения. Однако я должен буду гарантировать исправность $_GET['page'] предотвратить противные изменения как index.php?page=http://www.bad-site.org/malicious-script.js.

Я лично не слишком взволнован второй идеей, но первый звучит очень небезопасным. Кто-то мог предложить хороший способ получить сделанный?

Править: Я не в пользу выбирающих данных из базы данных. Единственное время я хотел бы выбрать данные из базы данных, будет, когда содержание будет кэшироваться. Во-вторых, у меня нет доступа к memcached или любому акселератору PHP.

5
задан susmits 15 April 2010 в 01:39
поделиться

3 ответа

Поскольку вы создаете CMS, вам придется согласиться с тем, что, если пользователь хочет причинить посетителям зло, они, скорее всего, так и сделают. Это верно независимо от того, где вы храните свой контент.

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

Даже если вы не хотите каждый раз обращаться к базе данных, вы можете настроить кеш, чтобы минимизировать чтение базы данных. Zend_Cache очень хорошо работает для этого и может довольно эффективно использоваться как автономный компонент.

2
ответ дан 15 December 2019 в 06:21
поделиться

Вы должны поместить свои страницы в базу данных и получать их с помощью параметризованных запросов SQL.

1
ответ дан 15 December 2019 в 06:21
поделиться

Я бы выбрал второй вариант, но изменил его так, чтобы файлы извлекались с помощью mod_rewrite, а не пользовательской функции php.

0
ответ дан 15 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: