November 5th, 2010

фига

О безопасных CMS

Из всех поставленных в разное время на мои сервера клиентами CMS я так и не нашёл ни одной, которая удовлетворяла бы специфическому набору требований параноика:

Все CMS построены как один движок, в который может залогиниться в одном и том же поле как админ, так и модератор, так и посетитель.

С моей же точки зрения правильно построенная CMS обязана иметь иерархическую структуру следующего типа:

  1. Анонимному пользователю показывается сайт domain.ru, движок которого не имеет прав на запись в файловую систему своего каталога, имеет доступ к SQL базе как user1 с отдельным паролем и имеет права в базе ТОЛЬКО НА ЧТЕНИЕ.
  2. Залогиненный посетитель попадает на сайт www.domain.ru, движок которого "держит авторизацию" и имеет доступ к SQL базе как user2 с возможностью писать только в строго определённые таблицы.
  3. Модераторы попадают на сайт (случайное имя).domain2.ru, движок которого "держит авторизацию" и имеет доступ к SQL базе как user3 с возможностью писать только в строго определённые таблицы, более широкого списка, нежели простой посетитель.
  4. Администратор имеет вход на специальный сайт В ДРУГОМ ДОМЕНЕ И НА ДРУГОМ IP, доступ к которому по умолчанию закрыт для всех IP вообще, и только после предварительного входа для его текущего IP открывается правило файрволла, по которому уже логинится отдельным логином и паролем админ. Этот движок имеет как user4 полный доступ ко всей базе и ко всей файловой структуре всех четырёх движков.


Зачем разные и, особенно, СЛУЧАЙНЫЕ доменные имена?
Чтобы ворованные куки не могли быть использованы напрямую, кроме как в тот же момент времени.

При таком построении SQL Injection были бы просто невозможны.
Заметим, что технически всё это на современном mySQL реализуется тривиально.

Но никто так не делает. :(