role i uprawnienia użytkowników
| Po angielsku | user roles and capabilities (WordPress) |
|---|---|
| Którą formą pisać | po polsku Polska nazwa przyjęła się w tekstach i w wyszukiwarce — używaj jej samodzielnie. |
| Inne formy | role użytkowników WordPress · role i uprawnienia · uprawnienia (capabilities) · Administrator, Redaktor, Autor, Współpracownik, Subskrybent |
| Kategoria | Strony WWW, WordPress i hosting |
Role i uprawnienia użytkowników to mechanizm WordPressa, który każdemu kontu przypisuje rolę, a każdej roli zestaw uprawnień (capabilities), takich jak publish_posts, moderate_comments czy edit_users [1]. Rola określa, co użytkownik widzi i co może zrobić w panelu; uprawnienie to pojedyncza czynność, na przykład edycja albo publikacja wpisu [2]. Jest to wbudowana w WordPressa odmiana RBAC, czyli kontroli dostępu opartej na rolach. Dla bezpieczeństwa strony liczy się przede wszystkim to, ile kont ma najwyższe uprawnienia i czy wtyczki sprawdzają uprawnienia przed wykonaniem akcji.
Jak działa
Gdy użytkownik wysyła żądanie, WordPress najpierw ustala, kim jest (uwierzytelnianie), a następnie, czy wolno mu wykonać daną czynność (autoryzacja). Drugi krok sprowadza się do pytania o konkretne uprawnienie, a nie o nazwę roli. Kod wtyczki lub motywu robi to funkcją current_user_can(), która sprawdza uprawnienia bieżącego użytkownika [2]. Dokumentacja dla autorów wtyczek zaleca, by każdą operację na danych przesłanych przez użytkownika, w panelu i na stronie publicznej, wykonywać dopiero po sprawdzeniu uprawnień [3].
// Obronny wzorzec: akcja tylko dla użytkowników z uprawnieniem edit_others_posts
if ( current_user_can( 'edit_others_posts' ) ) {
// wykonanie operacji
}
Role i ich uprawnienia są zapisane w bazie danych, w tabeli opcji pod kluczem user_roles [2]. Funkcje add_role() i remove_role() dodają i usuwają role, a add_cap() i remove_cap() zmieniają pojedyncze uprawnienia [1]. Ponieważ zmiana trafia do bazy, wystarczy ją wykonać raz: kolejne wywołania add_role() dla istniejącej roli niczego nie zmieniają, nawet listy uprawnień [2].
Sprawdzenie uprawnień przy każdym żądaniu pokazuje schemat poniżej.
Rodzaje
WordPress ma sześć predefiniowanych ról: superadministrator, administrator, redaktor, autor, współpracownik i subskrybent [1]. Dokumentacja zaznacza, że nie należy traktować jednej roli jako starszej od drugiej, lecz jako opis obowiązków w witrynie [1].
| Rola | Zakres według dokumentacji | Wybrane uprawnienia |
|---|---|---|
| Superadministrator | administracja sieci witryn i wszystkie funkcje [1] | manage_network_users, upload_plugins [1] |
| Administrator | wszystkie funkcje jednej witryny [1] | install_plugins, edit_users, manage_options [1] |
| Redaktor | publikuje i zarządza wpisami, także cudzymi [1] | edit_others_posts, unfiltered_html [1] |
| Autor | publikuje i zarządza własnymi wpisami [1] | publish_posts, upload_files [1] |
| Współpracownik | pisze własne wpisy, ale nie publikuje [1] | edit_posts, delete_posts [1] |
| Subskrybent | zarządza tylko swoim profilem [1] | read [1] |
Kilka uprawnień ma szczególne znaczenie dla bezpieczeństwa. unfiltered_html pozwala zapisywać dowolny HTML i JavaScript; na pojedynczej witrynie mają je administrator i redaktor [1]. Uprawnienie unfiltered_upload nie przysługuje domyślnie żadnej roli, nawet superadministratorowi, i wymaga zdefiniowania stałej ALLOW_UNFILTERED_UPLOADS [1].
W WordPressie
Rola domyślna i otwarta rejestracja. Ustawienie „Każdy może się zarejestrować” w Ustawieniach ogólnych pozwala każdemu założyć konto w witrynie [4]. Rolę nadawaną nowym kontom wybiera się w tym samym miejscu; na liście jest także Administrator [4]. Wartość tej opcji przechowuje default_role. Otwarta rejestracja w połączeniu z błędną rolą domyślną daje każdemu gościowi pełną kontrolę nad stroną.
Luki dostępne dla subskrybenta. Subskrybent ma tylko uprawnienie read [1], ale jest zalogowany. Jeśli wtyczka wykonuje akcję bez sprawdzenia uprawnienia, każde konto, także subskrybenta, może ją wywołać. Taki błąd to brak kontroli uprawnień (missing authorization); w opisach podatności często pojawia się dopisek o wymaganym poziomie dostępu. Przy otwartej rejestracji poziom subskrybenta jest w praktyce dostępny dla każdego.
Uprawnienia do plików. Stała DISALLOW_FILE_EDIT w pliku wp-config.php działa tak, jakby wszystkim użytkownikom odebrać uprawnienia edit_themes, edit_plugins i edit_files [6]. Wyłącza to edytor plików motywów i wtyczek, który dokumentacja opisuje jako częste pierwsze narzędzie napastnika po zalogowaniu [6].
Zagrożenia i skutki
MITRE opisuje słabość CWE-269 jako sytuację, w której produkt nie przydziela, nie zmienia, nie śledzi albo nie sprawdza poprawnie uprawnień, tworząc nieprzewidziany zakres kontroli [5]. W WordPressie przybiera ona kilka postaci.
- eskalacja uprawnień: subskrybent albo współpracownik uzyskuje uprawnienia administratora przez błąd we wtyczce.
- nieautoryzowane konto administratora: napastnik zakłada nowe konto z pełnymi uprawnieniami, co jest typowym śladem przejęcia strony.
- Nadmiar administratorów: każde konto z rolą administratora może instalować wtyczki [1], więc jego przejęcie oznacza przejęcie całej witryny.
- Stored XSS przez
unfiltered_html: konto redaktora z tym uprawnieniem może zapisać skrypt, który wykona się w przeglądarce administratora.
Jak się bronić
Podstawą jest zasada najmniejszych uprawnień. MITRE zaleca stosować ją przy przydzielaniu praw dostępu oraz rozdzielać uprawnienia tak, by dostęp wymagał spełnienia kilku warunków [5].
- Ograniczyć liczbę administratorów i do codziennej pracy używać ról o mniejszych uprawnieniach [7].
- Nie nadawać administratorom nazw użytkownika łatwych do odgadnięcia, takich jak
adminczywebmaster[6]. - Włączyć uwierzytelnianie dwuskładnikowe (2FA) dla wszystkich administratorów i kont uprzywilejowanych [7].
- Wyłączyć rejestrację, jeśli strona jej nie potrzebuje, a przy włączonej sprawdzić, czy rolą domyślną jest subskrybent [4].
- Okresowo przeglądać listę użytkowników i usuwać konta nieużywane albo obniżać im rolę [7].
- W kodzie własnych wtyczek sprawdzać uprawnienia przez
current_user_can()przed każdą operacją [3], a nie polegać na tym, że żądanie pochodzi z panelu. Szerzej opisuje to weryfikacja uprawnień. - Wyłączyć edytor plików stałą
DISALLOW_FILE_EDIT[6].
Historia i przykłady
WordPress rozwija model ról od wczesnych wersji; obecna dokumentacja wymienia sześć ról i kilkadziesiąt uprawnień w tabeli zestawiającej je z rolami [1]. Nowsze funkcje dodają uprawnienia bez zmiany samego modelu: dokumentacja opisuje osobno uprawnienia edytora witryny, dostępnego przy aktywnym motywie blokowym [1]. Stałe elementy pozostają te same: administrator tworzony automatycznie przy instalacji [1], subskrybent z jednym uprawnieniem read [1] i zalecenie, by kod wtyczek sam pilnował uprawnień [3].
Przypisy
7- [1] Roles and Capabilities · WordPress.org
- [2] Roles and Capabilities — Plugin Handbook · WordPress.org
- [3] Checking User Capabilities — Plugin Handbook · WordPress.org
- [4] Settings General screen · WordPress.org
- [5] CWE-269: Improper Privilege Management · MITRE
- [6] Hardening WordPress — Advanced Administration Handbook · WordPress.org
- [7] Brute Force Attacks — Advanced Administration Handbook · WordPress.org
Hasła w tym artykule
14Linkują tutaj
50- XSS (Cross-Site Scripting)
- prywatność
- autoryzacja
- socjotechnika
- CSRF (Cross-Site Request Forgery)
- weryfikacja uprawnień
- Broken Access Control
- brak kontroli uprawnień (missing authorization)
- prefiks tabel
- uwierzytelnianie wieloskładnikowe
- CVSS
- IDOR (Insecure Direct Object Reference)
- wgranie dowolnego pliku (arbitrary file upload)
- Stored XSS
- edytor plików motywów i wtyczek
- niezabezpieczony endpoint REST API
- Reflected XSS
- SSTI
- hasła aplikacji
- XXE
- eskalacja uprawnień
- spam w komentarzach
- Zero Trust
- clickjacking
- insider
- tailgating
- nieautoryzowane konto administratora
- wiper
- RBAC
- zasada najmniejszych uprawnień
- SSO
- zarządzanie tożsamością i dostępem
- identity provider (IdP)
- polityka bezpieczeństwa
- ujawnienie informacji wrażliwych
- audyt bezpieczeństwa
- dezinformacja
- excessive agency
- zarządzanie dostępem uprzywilejowanym (PAM)
- zatruwanie narzędzi
- BYOD
- dostęp just-in-time
- ISO/IEC 27001
- grooming (uwodzenie dziecka w sieci)
- ocena skutków dla ochrony danych
- zatruwanie danych / zatruwanie modelu
- cyberprzemoc
- uwzględnianie ochrony danych w fazie projektowania
- default_role
- unfiltered_html