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ć przykładowy 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

Teoretycznie problem nie jest bardzo złożony, jednakże może przyczynić się do stworzenia trudnych w zlokalizowaniu błędów. Aby lepiej zrozumieć zagadnienie, należy wyobrazić sobie użytkownika o uprawnieniach autor, który wprowadził do WordPressa artykuł na przykład liczący 500 słów. W treści artykułu użytkownik dodał kilka linków, a w jednym z nich dodał PDF-a do pobrania (z atrybutem download). Podczas zapisu wpisu użytkownik nie zostanie w żaden sposób poinformowany o tym, że wprowadzona przez niego treść została zmodyfikowana. Przy artykule liczącym 500 słów trudno będzie zauważyć zniknięcie jednego atrybutu.

Jeszcze bardziej problematycznym przykładem wywołania błędu może być sytuacja, w której współpracownik próbuje edytować wpis, który został opublikowany rok temu (np. poprawia literówkę lub błąd ortograficzny). Przez rok użytkownicy o wyższych uprawnieniach (redaktor lub administrator) mogli edytować wpis i na przykład dodać do niego specjalne 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 bazowo został on dodany przez użytkownika posiadającego wyższe uprawnienia. I to wszystko wydarzy się bez żadnego komunikatu o błędzie.

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

Aby rozwiązać problem automatycznego kasowania atrybutów, należy dodać odpowiednie uprawnień dla ról, które ich nie posiadają (unfiltered_html) lub edytować listę dozwolonych tagów i atrybutów (wp_kses_allowed_html). Pierwsza 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. Druga 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.

Kontakt ze specjalistą →