W dzisiejszym wpisie opiszę czym jest plik .htaccess, do czego służy i jak go wykorzystać aby usprawnić i zwiększyć bezpieczeństwo WordPressa. Przedstawiam 5 gotowych reguł z których warto skorzystać. Czyli podstawowe funkcje konfiguracyjne serwera www.

.htaccess - 5 przydatnych reguł do zwiększenia bezpieczeństwa WordPressa
.htaccess – 5 przydatnych reguł do zwiększenia bezpieczeństwa WordPressa

.htaccess – wstęp co to jest i do czego służy?

Hypertext Access czyli plik tekstowy, który konfiguruje ustawienia serwera www jest w skrócie nazywanym htaccess

Do czego to służy?

W pliku .htaccess można zapisać komendy, które modyfikują konfigurację serwera. Do najpopularniejszych konfiguracji które wprowadza się w tym pliku należą:

  • Zabezpieczenie strony lub pliku hasłem;
  • Zabezpieczenie katalogu hasłem;
  • Utworzenie własnych stron błędów HTTP – np. własna strona z błędem 404;
  • Konfiguracja kompresji gzip;
  • Ograniczanie dostępu dla wybranej domeny, lub określonego adresu IP;
  • Dostęp z określonego IP;
  • przekierowanie adresów „z www na bez www”;
  • przekierowanie odwiedzającyh na inną stronę.

Gdzie jest htaccess i gdzie zamieścić ten plik?

Plik ten jest zawsze zamieszczany w katalogu którego ma dotyczyć dana konfiguracja. Uwaga! Konfiguracja dotyczy też wszystkich katalogów podrzędnych. W przypadku gdy mamy następującą strukturę katalogów:

  • serwer
    • Katalog 1
      • 1A
      • 1B
      • 1C
    • Katalog 2
      • 2A
      • 2B
    • Katalog

Jeśli w katalogu „1” zostanie zamieszczony plik .htacces, będzie on obowiązywał w zarówno katalogu „1” jak i mu podrzędnych czyli „1A”, „1B”, „1C”. Ta konfiguracja nie będzie jednak dotyczyła „Katalogu 2”, „Katalogu 3”, „Katalogu 2A”, itd.

Aby skonfigurować serwer dla całej strony internetowej należy wprowadzić odpowiednie reguły w pliku .htaccess i zapisać go w katalogu głównym strony internetowej/domeny.

Dlaczego nie widzę pliku .htaccess?

Z jednej strony możliwe że go po prostu nie ma w danym katalogu. Plik ten nie jest niezbędny do prawidłowej pracy serwera www. Ale znacznie częściej jest on ukryty. Plik .htaccess ma bardzo oryginalną strukturę nazwy – zaczyna się od kropki. Domyślnie w wielu programach i np. explorerze Windows tego typu pliki są ukryte. Aby go znaleźć należy w konfiguracji programu/przeglądarki plików włączyć wyświetlanie ukrytych plików.

Jak edytować plik .htaccess?

Jest to zwykły plik tekstowy dlatego polecam skorzystać z dowolnego prostego edytora tekstu, t.j. Notatnik, TextEdit, Bracket czy innego programu do edycji kodu. Niektóre edytory tekstu „nie chcą” edytować pliku o takim formacie więc warto chwilowo zmienić mu nazwę usuwając pierwszą kropkę i dodając rozszerzenie .txt np: htaccess.txt. Po edycji i wgraniu pliku na serwer należy ponownie zmienić mu nazwę na prawidłową. Nie zapomnij kropki przed nazwą!

Co ma .htaccess do WordPressa?

Teoretycznie plik .htaccess dotyczy konfiguracji serwera, ale oczywiście tego na którym jest zainstalowany WordPress, dlatego ich powiązanie jest bardzo znaczące. Gdy na serwerze zostanie zainstalowany WordPress do pliku .htaccess jest dopisywana następująca składnia:

#BEGIN WordPress
RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
#END WordPress

Sugeruję jej nie ruszać, warto natomiast dopisać kilka dodatkowych reguł które również dotyczą WordPressa i nieco go poprawią.

Polecane reguły dla WordPressa

Blokada dostępu do .htaccess

# Blokada dostepu do htaccess
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>

Pierwsza reguła w .htaccess blokuje dostęp do tego pliku, dzięki temu jego zawartość będzie dostępna tylko przez połączenie z serwerem ftp. Uniemożliwiamy podejrzenie i edycję reguł i zabezpieczeń zapisanych w tym pliku.

Blokada dostępu do wp-config

# Blokada dostepu do wp-config
<files wp-config.php>
order allow,deny
deny from all
</files>

Podobnie jak w poprzednim punkcie, blokujemy dostęp do jednego z najważniejszych plików WordPressa. Plik wp-config.php zawiera bardzo ważne informacje dotyczące konfiguracji CMS-a. W tym pliku przechowywane są również dane dostępowe do bazy danych MySQL. Podejrzenie zawartości tego pliku umożliwia dostanie się do bazy danych strony internetowej i nieograniczone możliwości edycji jej zawartości.

Blokada dostępu do pliku XMLRPC

# Blokuje plik XMLRPC - do API
 <files xmlrpc.php>
  order deny,allow
  deny from all
 </files>

Ostatnia reguła blokująca dostęp do pliku dotyczy xmlrpc.php Jest to mało znany i rzadko używany plik WordPressa. Zanim użyjesz tej reguły upewnij się czy korzystasz z tego pliku!

Do czego służy plik XMLRPC.php

Jest to plik umożliwiający połączenie się z WordPressem i jego edycję za pomocą zewnętrznych programów i API. Np. jeśli zamiast logować się do panelu administracyjnego, korzystasz z aplikacji np. na tablecie to ten plik to umożliwia. Jeśli wszyscy administratorzy używają jedynie panelu administracyjnego – nie wykorzystują innych aplikacji do zarządzania stroną to zapewne xmlrpc.php nie jest używany i może zostać zablokowany.

Dlaczego blokować XMLRPC.php

Prócz zewnętrznych programów, z tym plikiem próbuje łączyć się wiele robotów wkradających się do WordPressa. Widziałem wiele prób niechcianych połączeń z tym plikiem co nie tylko daje szansę włamania ale i obciąża serwer. Zablokowanie tego pliki może przyczynić się do zmniejszenia obciążenia serwera.

Przekierowanie SSL

# Przekierowanie SSL
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.well-known/acme-challenge
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Istnieje wiele reguł przekierowujących stronę ze standardowego http na szyfrowane https, warto więc sprawdzić u swojego operatora hostingu czy nie sugeruje jakiejś konkretnej komendy. Powyższa formuła jest zalecana gdy strona korzysta z bardzo popularnych darmowych certyfikatów SSL – Let’s Encrypt.

Blokowanie skanowania autorów

# BEGIN blokowanie skanowania autorow wordpress
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (author=\d+) [NC]
RewriteRule .* - [F]

Dzięki tej regule zablokujemy skanowanie zarejestrowanych autorów na naszej stronie WordPress.

Dlaczego mam blokować skanowanie autorów?

Często roboty przeszukujące strony internetowe sprawdzają jaki autor jest zarejestrowany na danej stronie – nick. Następnie wchodzą na stronę logowania do panelu administracyjnego WordPressa i metodą brute force wykorzystują zdobyty login i sprawdzają możliwe kombinacje haseł do złamania. Zablokowanie skanowania autorów utrudni zdobycie loginów.

Inne przydatne reguły .htaccess wykorzystywane w WordPressie.

Jest jeszcze wiele innych reguł które mogą się przydać w specyficznych sytuacjach. Poniżej zamieszczam kilka wybranych, które uważam za najbardziej godne uwagi.

Zwiększenie limitu pamięci php

# Zwiększenie limitu pamięci php
php_value memory_limit 128M

Każdy hosting ma swoje ograniczenia pamięci, niektóre mają dodatkowo nałożone limity. Dzięki tej formule można zwiększyć limit pamięci wykorzystywanej przez skrypty PHP. Uwaga! Ciągłe zwiększanie pamięci może być oznaką błędów, źle zbudowanej strony, złej jej konfiguracji lub obecnością niechcianego skryptu czy wirusa. Zamiast zwiększać bez ograniczeń limit sprawdź czy strona faktycznie ma takie zapotrzebowanie. W przypadku prostych stron (bez systemu WooCommerce, itp) często podstawowe parametry hostingu są wystarczające.

Maksymalna wielkość wysyłania plików

# Maksymalna wielkosc wyslanych plikow
php_value upload_max_filesize 128M

Czasem hosting ogranicza wielkość wysyłanych plików przez co do biblioteki mediów WordPress nie da się wysłać pliku większego niż np. 32MB. Dzięki tej formule można zwiększyć limit wielkości pliku. Jest to szczególnie istotne gdy na stronie ma być zamieszczone video.

Blokada IP

# Blokada IP
Order deny,allow
Deny from 54.38.253.233

Gdy już nic nie pomaga i mamy stałe połączenia z konkretnego adresu IP które próbuje zablokować nam działanie strony www można skorzystać z funkcji blokady adresu IP. Ta prosta formuła daje dostęp do strony www wszystkim (Order deny,allow) prócz wskazanemu adresowi IP (deny from …). Jeśli adresów jest kilka można w kolejnych liniach dalej wprowadzać kolejne adresy do zablokowania np:

# Blokada IP
Order deny,allow
Deny from 54.38.253.233
Deny from 212.85.112.3
Deny from ... kolejne adresy IP...

Połączenia z tych adresów będą całkowicie blokowane.

Jak sprawdzić które IP generuje niechciane połączenia?

Aby sprawdzić z jakich adresów przychodzi najwięcej połączeń warto przeanalizować pliki logów rejestrujące wszystkie połączenia z serwerem i wykonywane działania. Logi najczęściej są dostępne w panelu administracyjnym hostingu, na serwerze ftp lub udostępniane przez administratorów serwera.

Najważniejsze reguły – razem

Poniżej zamieszczam wszystkie wspomniane najważniejsze reguły, które warto skopiować i wykorzystać w swoim pliku .htaccess.

# Blokada dostepu do htaccess
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>


# Blokada dostepu do wp-config
<files wp-config.php>
order allow,deny
deny from all
</files>


# Blokuje plik xmlrpc - do API
 <files xmlrpc.php>
  order deny,allow
  deny from all
 </files>


# Przekierowanie SSL
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.well-known/acme-challenge
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


# BEGIN blokowanie skanowania autorow wordpress
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (author=\d+) [NC]
RewriteRule .* - [F]

Życzę dobrego użytkowania 🙂

Źródła i linki