15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
22.10.2024

WordPress Редактор срещу Роля на Администратор: Пълно Техническо Ръководство

WordPress се доставя с гранулирана система за контрол на достъпа, базирана на роли (RBAC), вградена директно в ядрото му. От всички роли по подразбиране, Administrator и Editor са двете най-значими — и най-често неправилно присвоявани. Administrator притежава неограничени права над всеки обект в WordPress, докато Editor работи с широки правомощия върху съдържанието, но без никакъв достъп до контроли на инфраструктурно ниво като теми, плъгини или настройки на сайта.

Грешното разбиране на тази разлика не е просто неудобство. Предоставянето на достъп като Administrator на автор на съдържание в производствен сайт е директна уязвимост: един компрометиран акаунт може да инсталира злонамерен плъгин, да извлече базата данни или да блокира всички останали потребители. Това ръководство ви дава техническата дълбочина, за да вземате правилното решение всеки път.

Как всъщност работят ролите и правомощията в WordPress

Преди да сравним двете роли, си струва да разберем основната архитектура. WordPress не съхранява ролите като фиксирано свойство на потребителски акаунт. Вместо това съхранява сериализиран масив от правомощия в таблицата wp_usermeta под ключа wp_capabilities (където wp_ е вашият префикс на таблицата). Всяка роля е просто именуван набор от правомощия, регистрирани в класа WP_Roles.

Когато потребител се опита да извърши действие — публикуване на публикация, изтриване на плъгин, редактиране на профила на друг потребител — WordPress извиква current_user_can(), който съпоставя съхранените правомощия на потребителя с исканото примитивно действие. Това означава, че правомощията са адитивни и, което е важно, могат да бъдат персонализирани за всеки потребител независимо от ролята му чрез плъгини като Members или User Role Editor.

Практическото следствие: ако имате нужда от потребител, който може да прави *почти* всичко, което може Editor, но също така да управлява един конкретен плъгин, не е необходимо да го повишавате до Administrator. Можете да му предоставите едно допълнително правомощие. Разбирането на това предотвратява най-честата грешка при прекомерно предоставяне на права в управлението на екипи в WordPress.

Роля Administrator: Пълен преглед на правомощията

Ролята Administrator съответства на практически всяко примитивно правомощие, което WordPress предоставя. При инсталация на единичен сайт, това включва, но не се ограничава до:

Основни правомощия за управление на сайта:

    manage_options — четене и запис на всички настройки чрез wp-admin/options-general.php, включително URL на сайта, имейл на администратора, структура на постоянните връзки и часова зона
    install_plugins, activate_plugins, update_plugins, delete_plugins — пълен контрол върху жизнения цикъл на плъгините
    install_themes, switch_themes, edit_themes, delete_themes — пълен контрол върху жизнения цикъл на темите, включително директно редактиране на файлове чрез вградения редактор на теми (значителен вектор за атака)
    edit_files — достъп до вградения редактор на код за теми и плъгини (това правомощие е деактивирано, когато DISALLOW_FILE_EDIT е зададено на true в wp-config.php)
    
    Правомощия за управление на потребители:
    
    create_users, edit_users, delete_users, promote_users, list_users — пълни правомощия над всеки потребителски акаунт на сайта, включително възможността за понижаване или изтриване на други Administrator-и
    remove_users — премахване на потребители от Multisite мрежа
    
    Правомощия за съдържание:
    
    edit_others_posts, edit_published_posts, delete_others_posts, delete_published_posts, delete_private_posts
  • publish_posts, publish_pages, edit_pages, delete_pages, edit_others_pages
  • Разширени правомощия:

      import — импортиране на съдържание чрез инструмента за импортиране на WordPress (може да се използва за инжектиране на произволно съдържание в голям мащаб)
      export — експортиране на цялото съдържание на сайта като XML файл, включително всички потребителски данни
      update_core — задействане на актуализации на ядрото на WordPress
      manage_categories, moderate_comments, unfiltered_html — публикуване на необработен HTML, включително тагове <script>, без санитизация
      
      Правомощието unfiltered_html заслужава специално внимание. При стандартна инсталация на единичен сайт, и Administrator-ите, и Editor-ите го получават. При WordPress Multisite, само Super Admin-ите го запазват. Това е значима граница за сигурност: без unfiltered_html, филтърът wp_kses_post() премахва JavaScript и друг потенциално опасен маркъп от запазеното съдържание.
      Кога да присвоите ролята Administrator
      
      Лицето, което притежава хостинг акаунта и е отговорно за техническата цялост на сайта
      Проверен разработчик или DevOps инженер, извършващ разработка на теми, конфигурация на плъгини или интеграция на сървърно ниво
      Специалист по миграция по време на еднократна операция по импортиране/експортиране (помислете за отнемане на ролята след това)
      
      Критична оперативна бележка: Никога не присвоявайте Administrator на споделен или общ акаунт. Всеки Administrator трябва да бъде конкретно лице с уникална, силна парола и активирано двуфакторно удостоверяване. Ако използвате WordPress в среда с VPS Хостинг, съчетайте хигиената на Administrator на ниво WordPress с разделяне на потребителите на ниво ОС — процесът на вашия уеб сървър никога не трябва да работи като root, а собствеността върху файловете на WordPress трябва да се различава от потребителя на уеб сървъра.
      Роля Editor: Преглед на правомощията
      Ролята Editor е създадена специално за операции със съдържание. Тя предоставя широки правомощия върху публикации, страници, медия, коментари и таксономия — но умишлено изключва всяко правомощие на инфраструктурно ниво.
      Правомощия за съдържание, които Editor притежава:
      
      edit_posts, edit_others_posts, edit_published_posts, edit_private_posts
    • delete_posts, delete_others_posts, delete_published_posts, delete_private_posts
    • publish_posts, publish_pages
    • edit_pages, edit_others_pages, edit_published_pages, edit_private_pages
    • delete_pages, delete_others_pages, delete_published_pages, delete_private_pages
    • manage_categories — създаване, преименуване и изтриване на категории и тагове
    • moderate_comments — одобряване, неодобряване, маркиране като спам или окончателно изтриване на коментари
    • upload_files — добавяне на медия към библиотеката; редактиране на метаданни на изображения и алтернативен текст
    • read_private_posts, read_private_pages — преглед на съдържание, което не е публично достъпно
    • unfiltered_html — при инсталации на единичен сайт, Editor-ите могат да публикуват необработен HTML (вижте бележката за Multisite по-горе)
    • Какво Editor изрично не може да прави:

      • Достъп до wp-admin/options-general.php или до екрани с настройки
      • Инсталиране, активиране, деактивиране или изтриване на плъгини или теми
      • Преглед или промяна на потребителски акаунти, различни от собствения профил
      • Изпълнение на актуализации на ядрото на WordPress
      • Достъп до вградените редактори на файлове за теми или плъгини
      • Промяна на структурата на постоянните връзки, което би нарушило всички съществуващи URL адреси в целия сайт
      • Експортиране или импортиране на данни на сайта

      Кога да присвоите ролята Editor

      • Главен редактор или директор на съдържанието, който управлява редакционния календар и одобрява чернови от множество сътрудници
      • SEO специалист, който трябва да публикува, планира и оптимизира публикации, но няма работа с настройките на плъгините
      • Мениджър на социални медии или маркетинг, отговорен за поддържането на активен блог
      • Клиент, който трябва да актуализира собствените си страници без риск от случайно повреждане на сайта

      Administrator срещу Editor: Сравнение един до друг

      Област на правомощияAdministratorEditor
      Инсталиране / актуализиране / изтриване на плъгиниДаНе
      Инсталиране / актуализиране / изтриване на темиДаНе
      Редактиране на файлове на теми / плъгини (редактор на код)Да (освен ако DISALLOW_FILE_EDIT)Не
      Управление на актуализации на ядрото на WordPressДаНе
      Достъп до настройките на сайта (опции)ДаНе
      Промяна на структурата на постоянните връзкиДаНе
      Създаване / редактиране / изтриване на други потребителиДаНе
      Присвояване или промяна на потребителски ролиДаНе
      Публикуване и редактиране на собствени публикацииДаДа
      Редактиране и изтриване на публикации на други потребителиДаДа
      Управление на категории и таговеДаДа
      Модериране на коментариДаДа
      Качване и управление на медияДаДа
      Четене на частни публикации и странициДаДа
      Публикуване на нефилтриран HTML (единичен сайт)ДаДа
      Експортиране на съдържанието на сайтаДаНе
      Импортиране на съдържаниеДаНе
      Достъп до администрацията на Multisite мрежатаСамо Super AdminНе

      Последици за сигурността при неправилно присвояване на роли

      Проблемът с прекомерно привилегирования Editor

      Честа практика в агенциите: на автор на съдържание се дава достъп като Administrator, защото „така е по-лесно”. Това създава няколко конкретни рискове:

      1. Инсталирането на плъгини като вектор за изпълнение на код. Всеки Administrator може да инсталира плъгин. Плъгинът е PHP код, който се изпълнява на вашия сървър. Компрометиран Administrator акаунт означава отдалечено изпълнение на код.
      2. Събиране на идентификационни данни чрез експортиране. Инструментът за експортиране на WordPress създава XML файл, съдържащ цялото съдържание на публикациите, коментарите и метаданните на авторите. Administrator може да го задейства безшумно.
      3. Устойчивост на ескалация на привилегии. Нападател, получил достъп като Administrator, може да създаде нов Administrator акаунт, след което да изтрие следите — блокирайки законния собственик.
      4. Злоупотреба с unfiltered_html. Дори без достъп до плъгини, Administrator може да инжектира тагове <script> директно в съдържанието на публикациите, позволявайки атаки от тип stored XSS срещу посетителите на сайта.

      Укрепване на ролята Administrator

      Освен присвояването на роли, приложете тези контроли на ниво WordPress на всеки производствен сайт:

      Добавете следното към wp-config.php, за да деактивирате вградения редактор на файлове:

      define( 'DISALLOW_FILE_EDIT', true );
      define( 'DISALLOW_FILE_MODS', true ); // Also blocks plugin/theme installation

      Ограничете достъпа до административната зона на WordPress по IP на ниво сървър. За Nginx:

      location /wp-admin/ {
          allow 203.0.113.0/24;
          deny all;
      }

      За Apache, добавете към .htaccess:

      <Files "wp-login.php">
          Require ip 203.0.113.0/24
      </Files>

      Налагайте силни пароли и двуфакторно удостоверяване чрез плъгин като WP 2FA или Wordfence Login Security. Ако сайтът ви работи на Dedicated Server, помислете за поставяне на административния панел на WordPress зад VPN или SSH тунел, вместо да го излагате изобщо на публичния интернет.

      Защита на ролята Editor от злоупотреба

      Ролята Editor е значително по-безопасна от Administrator, но не е без рискове:

      • Editor с unfiltered_html може да инжектира проследяващи пиксели, партньорски пренасочвания или злонамерени скриптове в съдържанието на публикациите. При Multisite това правомощие се премахва — силен аргумент за използване на Multisite мрежа, когато имате много автори на съдържание.
      • Editor може окончателно да изтрие всяка публикация или страница, включително тези, които не е авторирал. Няма вградена кошница за страници. Използвайте стратегия за ревизии или резервни копия, за да смекчите това.
      • Editor може да одобрява коментари, включително такива, съдържащи спам връзки, което засяга SEO и репутацията на вашия сайт.

      WordPress Multisite: Как се променят ролите

      В WordPress Multisite мрежа йерархията на ролите придобива допълнително ниво: Super Administrator. Super Admin стои над всички Administrator-и на ниво сайт и контролира настройките на цялата мрежа, активирането на плъгини в всички сайтове и създаването на потребители на ниво мрежа.

      При Multisite, Administrator на ниво сайт губи няколко правомощия, които съществуват при инсталации на единичен сайт, включително възможността за инсталиране на плъгини (само Super Admin-ите могат да правят това в цялата мрежа) и правомощието unfiltered_html. Това прави Multisite по-защитима архитектура за агенции, управляващи клиентски сайтове, или издатели, управляващи множество редакционни платформи.

      Ако изграждате многонаемателна издателска платформа, VPS с cPanel може да опрости слоя за управление на сървъра, докато WordPress Multisite се грижи за разделянето на ролите на ниво приложение.

      Персонализирани роли: Когато нито Administrator, нито Editor е подходящ

      Функциите add_role() и add_cap() на WordPress ви позволяват да дефинирате роли с точно правомощията, изисквани от вашия работен процес. Например, Senior Editor, който може да прави всичко, което може Editor, плюс да управлява потребители (но не и плъгини), може да бъде създаден програмно:

      add_role(
          'senior_editor',
          'Senior Editor',
          array(
              // Inherit all standard Editor capabilities
              'read'                   => true,
              'edit_posts'             => true,
              'edit_others_posts'      => true,
              'edit_published_posts'   => true,
              'publish_posts'          => true,
              'delete_posts'           => true,
              'delete_others_posts'    => true,
              'delete_published_posts' => true,
              'edit_pages'             => true,
              'edit_others_pages'      => true,
              'edit_published_pages'   => true,
              'publish_pages'          => true,
              'delete_pages'           => true,
              'manage_categories'      => true,
              'moderate_comments'      => true,
              'upload_files'           => true,
              // Extended capability
              'list_users'             => true,
              'edit_users'             => true,
          )
      );

      Поставете този код в плъгин, специфичен за сайта (не в functions.php на тема), за да може ролята да се запази при промени на темата. Ролите се съхраняват в базата данни след първата регистрация, така че add_role() трябва да се изпълни само веднъж — обвийте го в кука за активиране на плъгин, използвайки register_activation_hook().

      Матрица за вземане на решения при присвояване на роли

      Използвайте този контролен списък преди присвояване на каквато и да е роля:

      Присвоете Administrator само ако потребителят:

      • Притежава сайта или има договорна отговорност за техническата му работа
      • Трябва да инсталира, конфигурира или актуализира плъгини и теми
      • Трябва да управлява други потребителски акаунти или да променя потребителски роли
      • Изисква достъп до настройките на WordPress, структурата на постоянните връзки или URL на сайта
      • Има активирано двуфакторно удостоверяване и използва уникален, несподелен акаунт
      • Разбира, че DISALLOW_FILE_MODS ще бъде зададено на true в производствена среда

      Присвоете Editor ако потребителят:

      • Отговаря за качеството на съдържанието, графиците за публикуване или редакционния преглед
      • Трябва да управлява публикации и страници, авторирани от други членове на екипа
      • Трябва да може да модерира коментари и да управлява медия
      • Не се нуждае — и не трябва да има — достъп до екрани с плъгини, теми или настройки
      • Може да бъде клиент, фрийлансър или изпълнител, чиято сигурност на акаунта не можете напълно да контролирате

      Помислете за персонализирана роля ако:

      • Вграденият Editor е твърде ограничителен (напр. потребителят се нуждае от list_users за плъгин за редакционен работен процес)
      • Вграденият Administrator е твърде разрешителен (напр. разработчик, който се нуждае от достъп до плъгини, но не трябва да докосва потребителски акаунти)
      • Управлявате Multisite мрежа с диференцирани отговорности в различните сайтове

      За екипи, управляващи WordPress заедно с транзакционен имейл, помислете за съчетаване на стратегията за роли с dedicated Email Хостинг настройка, така че имейлите с известия от WordPress (нулиране на пароли, регистрации на нови потребители, сигнали за коментари) да се маршрутизират през надежден, удостоверен пощенски сървър, а не чрез стандартния sendmail на хостинг сървъра — честа точка на неуспех при доставяемостта, която засяга работния процес на всяка роля.

      Ако вашият WordPress сайт обработва електронна търговия, членство или каквито и да е потребителски данни, уверете се, че вашите SSL Сертификати са актуални и правилно конфигурирани. Изтекъл сертификат не засяга само SEO — той нарушава контекста на сигурност на браузъра, който защитава идентификационните данни за вход на Administrator при пренос.

      Основни технически изводи

      • Правомощията на WordPress се съхраняват за всеки потребител в wp_usermeta, а не са твърдо кодирани — те могат да бъдат персонализирани без промяна на показваната роля на потребителя.
      • DISALLOW_FILE_EDIT и DISALLOW_FILE_MODS в wp-config.php са задължителни за всеки производствен сайт с множество Administrator-и.
      • Правомощието unfiltered_html съществува за Administrator-и и Editor-и при инсталации на единичен сайт. Multisite го премахва от всички под Super Admin.
      • Editor може окончателно да изтрие всяка публикация или страница, включително съдържание на други потребители. Внедрете стратегия за резервни копия или ревизии, преди да предоставите тази роля на някой извън основния ви екип.
      • Никога не използвайте споделен Administrator акаунт. Един акаунт на лице, двуфакторното удостоверяване е задължително, а регистрационните журнали са активирани чрез плъгин като WP Activity Log.
      • Персонализираните роли чрез add_role() са правилното решение, когато нито една роля по подразбиране не е подходяща — не предоставяйте прекомерни права, за да компенсирате липсващо правомощие.
      • При Multisite, Administrator-ите на ниво сайт не могат да инсталират плъгини. Това е функция, а не ограничение — това е правилната архитектура за управлявани многонаемателни среди.

      Често задавани въпроси

      Може ли Editor да изтрие публикациите на друг потребител в WordPress?

      Да. Ролята Editor включва delete_others_posts и delete_others_pages. Editor може окончателно да изтрие всяка публикация или страница на сайта, независимо кой я е авторирал. Няма вградена стъпка за потвърждение или кошница за страници, така че това действие е необратимо без резервно копие.

      Каква е разликата между Administrator и Super Administrator в WordPress?

      При инсталация на единичен WordPress сайт, Administrator е най-високата роля. В WordPress Multisite мрежа, Super Administrator стои над всички Administrator-и на ниво сайт и контролира настройките на цялата мрежа, инсталирането на плъгини в всички сайтове и възможността за добавяне или премахване на сайтове от мрежата. Administrator на ниво сайт при Multisite не може да инсталира плъгини или да използва unfiltered_html.

      Мога ли да дам на Editor достъп до настройките на един конкретен плъгин, без да го правя Administrator?

      Да. Използвайте add_cap(), за да предоставите конкретно правомощие на отделен потребител, или създайте персонализирана роля, която включва правомощията по подразбиране на Editor плюс конкретното правомощие, регистрирано от плъгина. Повечето добре написани плъгини използват current_user_can( 'manage_options' ) или персонализирано правомощие за страниците си с настройки — проверете изходния код на плъгина, за да идентифицирате точното необходимо правомощие.

      Безопасно ли е да има множество Administrator-и на WordPress сайт?

      Зависи изцяло от вашите оперативни контроли. Множеството Administrator-и умножават повърхността за атака — всеки акаунт е потенциална точка за влизане. Ако са необходими множество Administrator-и, наложете двуфакторно удостоверяване за всички тях, ограничете достъпа до /wp-admin/ по IP на ниво сървър, задайте DISALLOW_FILE_MODS на true и използвайте плъгин за регистрационни журнали за одит на всички административни действия.

      Как да проверя кои правомощия всъщност има конкретен потребител на WordPress?

      Направете заявка директно към базата данни или използвайте плъгин като Members или User Role Editor. За програмна проверка, използвайте get_user_meta( $user_id, $wpdb->prefix . 'capabilities', true ) в персонализиран скрипт или WordPress CLI:

      wp user get <user_id> --field=roles
      wp user list-caps <user_id>

      Командата wp user list-caps извежда всяко правомощие, което потребителят притежава, включително тези, предоставени индивидуално извън присвоената му роля — което е най-надеждният начин за одит на прекомерно привилегировани акаунти.

      15%

      Спести 15% на всички хостинг услуги

      Тествай уменията си и получи Отстъпка за всеки хостинг план

      Използвайте код:

      Skills
      За начало