PROTONUM

Praktyczne porady dla webmasterów, internautów i użytkowników komputerów

WordPress: jak zabezpieczyć formularz logowania przed atakami brute force?

Większość posiadaczy witryn stworzonych w WordPressie pewnie słyszała o atakach na formularze służące do logowania. Ataki brute force, czyli z wykorzystaniem metody siłowej, są prowadzone przez zautomatyzowane skrypty i polegają na wielokrotnie powtarzanych próbach zalogowania się do panelu administracyjnego bez znajomości loginu i hasła. Panel ten domyślnie jest dostępny pod adresem http://domena.com/wp-login.php. Jeśli ustawimy łatwy do odgadnięcia login typu „admin” czy „administrator”, a do tego zbyt proste hasło, bot (albo człowiek) atakujący naszą stronę może przejąć nad nią kontrolę. Zainfekowany serwer może wówczas stać się częścią botnetu, czyli sieci komputerów i serwerów zarażonych złośliwym oprogramowaniem. Botnety służą na przykład do masowego rozsyłania spamu – w najlepszym razie!

Nietypowy login oraz trudne hasło złożone z wielu cyfr, liter i znaków specjalnych są dobrym rozwiązaniem, ale tylko częściowo. Trzeba pamiętać bowiem o tym, że nieustanne i bardzo szybko powtarzane próby zalogowania się do panelu administracyjnego powodują mocne obciążenie serwera. W efekcie nasz dostawca hostingu może nam zablokować konto do czasu, aż odpowiednio zabezpieczymy swoją stronę.

Można za pomocą odpowiednich wtyczek do WordPressa zmienić nazwę pliku wp-login.php na mniej oczywistą, ale jeszcze prostszym, a do tego bardzo skutecznym rozwiązaniem jest wprowadzenie podwójnego logowania. Na czym to polega? Otóż użytkownik chcący przejść na stronę http://domena.com/wp-login.php będzie musiał najpierw podać osobny login i hasło, aby w ogóle móc dostać się do formularza logowania. Jeśli poda błędne dane, serwer nie pozwoli mu otworzyć strony z formularzem, nie wspominając już nawet o próbie zalogowania się do strony opartej na WordPressie.

Większość hostingów współdzielonych umożliwia użytkownikom zarządzanie serwerem poprzez cPanel albo DirectAdmin. Żaden z tych paneli nie daje możliwości ustawienia na poziomie serwera loginu i hasła dostępu do pojedynczego pliku – jest to możliwe tylko dla całego katalogu. Możemy jednak posłużyć się małym wybiegiem. Pokażę to na przykładzie cPanelu.

Logujemy się, wybieramy opcję pod nazwą „Ochrona katalogów”, a potem katalog główny naszej strony i klikamy na jego nazwę (nie ikonę). Wpisujemy dowolną nazwę chronionego katalogu, zaznaczamy opcję „Chroń ten katalog hasłem” i klikamy na „Zapisz”. Zaraz potem odznaczamy tę samą opcję i jeszcze raz klikamy na „Zapisz”.

Teraz pora na utworzenie loginu i hasła dostępowego. Login nie powinien być zbyt oczywisty, a hasło – zbyt łatwe do odgadnięcia. Do utworzenia dobrego hasła warto użyć dostępnego na tej stronie generatora haseł. Dane nowego użytkownika oczywiście zapisujemy.

Możemy już wylogować się z cPanelu. Teraz pozostało nam tylko zmodyfikować plik .htaccess, w którym serwer przechowuje różne ważne ustawienia konfiguracyjne. Jest on umieszczony w katalogu głównym naszej strony.

W momencie, gdy w cPanelu drugi raz zapisaliśmy nazwę chronionego katalogu bez wybierania opcji „Chroń ten katalog hasłem”, serwer w pliku .htaccess umieścił następujący wpis:

AuthName "domena.com"
AuthUserFile "/home/user/.htpasswds/public_html/domena.com/passwd"

Musimy go teraz zmodyfikować w następujący sposób:

<Files wp-login.php>
AuthType Basic
AuthName "domena.com"
AuthUserFile "/home/user/.htpasswds/public_html/domena.com/passwd"
require valid-user
</Files>

ErrorDocument 401 "Error 401"
ErrorDocument 403 "Error 403"

Oczywiście nazwę domena.com zastępujemy adresem swojej strony, a słowo user – swoim loginem do hostingu. W czwartej od góry linii jest podana ścieżka dostępu do pliku z zaszyfrowanym hasłem dostępu.

Od tej pory przed otwarciem strony wp-login.php serwer będzie żądał podania loginu i hasła, które wcześniej ustawiliśmy. To rozwiązanie w skuteczny sposób chroni instalację WordPressa, ponieważ autoryzacją wymuszoną przez plik .htaccess zajmuje się serwer, a nie skrypt WordPressa napisany w PHP.

Następny Post

Poprzedni Post

Skomentuj

2017-2020 PROTONUM

Projekt: Anders Norén    /     Kontakt    /     Info     /    Login