Написание системы плагинов PHP с ограниченным доступом к системе

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

Вот сложная часть: вместо того, чтобы индивидуально упаковывать CMS, я пытаюсь создать своего рода хост для многих сайтов (например, mycms.com/your-site).

Я проектирую базу данных MySQL с такой структурой:

pages
 - id
 - slug
 - title
 - content
 - site // The site id
sites
 - id
 - path // e.g. your-site
 - password // hash

Затем я буду хранить такие плагины в файловой структуре:

plugins/
  42/   // Site id
    hello-world/   // plugin name
      hello-world.php
      functions.php
      css/   // ...

Конечно, здесь есть серьезная проблема безопасности. Скажем, автор плагина кодирует hello-world.php примерно так:

<?php
 include '../../../core/config.inc.php';
 echo $config['mysql']['password']; // Now they have my server's database password!
?>

Как мне обойти что-то подобное? Как я могу управлять этим, чтобы hello-world.php имел доступ только к файлам в каталоге hello-world / и ничего над ним? По сути, я хочу запретить плагинам доступ к файлам вне их собственного каталога.

Это должно быть просто, верно?

Спасибо!

1 ответ

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

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