Opisany poniżej problem dotyczy użytkowników posiadających ograniczone uprawnienia do publikacji wpisów na stronie www. Dla domyślnie skonfigurowanej instancji WordPress są to autorwspółpracownik.

Przykładowy opis wywołania błędu usuwania atrybutu

Aby wywołać błąd, należy zalogować się do panelu administratora systemu WordPress, jako użytkownik posiadający uprawnienia autor lub współpracownik. Następnie należy do dowolnego wpisu wprowadzić tag, który posiada atrybut o ograniczonej dostępności (np. download, rel, data-label, class, id). Podczas zapisu wpisu atrybut zostanie automatycznie i bezpowrotnie usunięty z treści. Użytkownik nie zostanie w żaden sposób poinformowany o dokonanej zmianie.

Ten sam problem można wywołać, edytując wpis, w którym atrybut został już dodany (na przykład przez użytkownika z uprawnieniami redaktor lub administrator). Po zapisie edytowanego wpisu atrybut zostanie automatycznie usunięty, bez żadnego powiadomienia.

Złożoność problemu automatycznego usuwania atrybutu

Problem nie jest złożony, ale może przyczynić się do stworzenia trudnych w zlokalizowaniu błędów. Autor podczas zapisu wpisu nie zostanie poinformowany o tym, że wprowadzona przez niego treść została zmodyfikowana. Przy artykule liczącym kilkaset słów trudno będzie mu zauważyć zniknięcie jednego atrybutu.

Jeszcze bardziej problematycznym przykładem może być sytuacja, w której współpracownik edytuje wpis, który został opublikowany rok temu (np. poprawia literówkę, błąd ortograficzny lub po prostu aktualizuje informacje). Przez rok użytkownicy o wyższych uprawnieniach (np. pozycjonerzy) mogli edytować wpis i dodać do niego specjalne atrybuty do pozycjonowania (np. rel), klasy wyróżniające akapit (class) lub identyfikatory do bezpośredniego linkowania (id). Jeśli taki wpis edytuje użytkownik o uprawnieniach autor lub współpracownik, to wszystkie atrybuty o ograniczonej dostępności zostaną bezpowrotnie usunięte z treści wpisu, pomimo że zostały dodane przez użytkownika posiadającego wyższe uprawnienia. To wszystko wydarzy się bez żadnej informacji.

Jak rozwiązać problem automatycznego kasowania atrybutów?

  • Rozwiązanie 1: należy dodać odpowiednie uprawnienia dla ról, które ich nie posiadają (unfiltered_html). Ta opcja jest uniwersalna, ale powoduje, że użytkownicy o niższych uprawnieniach nie mają żadnych ograniczeń dotyczących wprowadzanych do treści tagów i atrybutów html.
  • Rozwiązanie 2: należy edytować listę dozwolonych tagów i atrybutów (wp_kses_allowed_html). Ta opcja jest bardziej restrykcyjna, ale w jej przypadku atrybuty i tagi trzeba ręcznie definiować, a więc istnieje duże ryzyko, że nie zdefiniujemy wszystkich niezbędnych tagów lub atrybutów.
  • Rozwiązanie 3: należy usunąć uprawnienie edit_published_posts dotyczące możliwości edycji opublikowanych wpisów użytkownikom, którzy nie mają dostępu do dodawania wszystkich atrybutów. W tej opcji osoby o niższych uprawnieniach nie będą mogły modyfikować opublikowanych artykułów, ale błąd wciąż będzie istniał dla artykułów nieopublikowanych (szkiców).

Kontakt ze specjalistą →