WordPress 4.7 wprowadził pełne REST API, poprzez które zewnętrzne aplikacje czy usługi mogą odczytywać wszystkie treści dostępne publicznie na naszej stronie, a po autoryzacji również je modyfikować i dodawać nowe. Idea tego interfejsu jest świetna i osobiście jestem jej wielkim zwolennikiem, ponieważ daje ona ogromne możliwości, dzięki którym WordPress może być wykorzystywany nie tylko do tworzenia stron, ale również jako CMS dla aplikacji mobilnych czy magazyn treści dla zewnętrznych serwisów i usług.
Interfejs ten ma jednak jedną wadę: każdy może z niego skorzystać, a domyślnie jest on włączony. Tak więc jeśli go nie używamy, to najlepiej po prostu go wyłączyć.
Wszystkie nasze treści dostępne dla każdego
Jak już wiemy, nie sposób zabezpieczyć naszych treści przed złodziejami – jeśli ktoś chce, to wyciągnie z naszej strony wszystko. W Internecie działa mnóstwo stron, które agregują treści bez wiedzy i zgody ich autorów. Pomijając sensowność tego procederu (Google jest coraz lepszy w rozpoznawaniu takich stron), nie jest to coś, co osoby poświęcające wiele godzin na tworzenie treści chciałyby widzieć.
Skrypty wyciągające teksty ze stron korzystają najczęściej z kanałów RSS. Oczywiście łatwo jest w ustawieniach WordPressa skonfigurować je tak, aby zawierały tylko fragmenty wpisów. W takim przypadku większość automatów daje sobie spokój, bo parsowanie strony w celu wyciągnięcia z niej treści wpisu jest już większym problemem.
Jednak niezależnie od ustawień kanałów RSS, REST API zawsze udostępnia całą treść wpisów. Aby to zobaczyć wystarczy w przeglądarce wpisać adres odpowiedniej metody API: http://nasza-domena.pl/wp-json/wp/v2/posts/
(działający przykład). To daje automatom do wyciągania treści ze stron możliwość szybkiego i taniego (zużywającego mało zasobów serwera) pobierania naszych wpisów.
Wszystko to dotyczy nie tylko wpisów, ale również stron, multimediów i komentarzy.
Pobieranie listy użytkowników
REST API udostępnia też metodę zwracającą listę wszystkich aktywnych użytkowników naszej strony. Mimo że lista ta nie zawiera oczywiście haseł ani adresów e-mail, to sam fakt jej dostępności jest już lekkim ułatwieniem dla złośliwych skryptów próbujących łamać hasła metodą brute force.
Jak wyłączyć REST API?
Przede wszystkim warto zaznaczyć, że nie ma tu żadnych powodów do paniki. Wszystkie dane udostępniane przez REST API są i tak w takiej czy innej formie dostępne na naszej stronie. Jednak jeśli nie korzystamy z REST API, to osobiście polecałbym jego wyłączenie.
Najprostszym sposobem na wyłączenie REST API jest dodanie takiego kodu do pliku functions.php
motywu lub do pliku wtyczki:
add_filter('rest_authentication_errors', 'wpzen_disable_rest_api', 99); function wpzen_disable_rest_api() { return new WP_Error('wpzen_rest_api_disabled', 'REST API disables', array('status' => 403)); }
Można też skorzystać z darmowej wtyczki REST API Toolbox, która pozwala nie tylko na wyłączenie całego REST API, ale również pojedynczych metod, dzięki czemu możemy na przykład wyłączyć możliwość pobierania wpisów, ale zostawić dostęp do komentarzy czy stron.
Po instalacji i aktywacji wtyczki wystarczy w panelu administracyjnym przejść do sekcji Ustawienia → REST API Toolbox i na zakładce General wyłączyć REST API i wsparcie dla JSONP. Jeśli chcemy wyłączyć tylko wybrane metody API, możemy to zrobić na zakładce Core.