Bezpieczna strona internetowa

Jeśli chcemy odpowiednio zadbać o bezpieczeństwo strony www, powinniśmy pamiętać o kilku podstawowych kwestiach:

1. Silne i unikalne hasła

Pierwszą, bardzo ważną rzeczą jest silne hasło.

Silne hasło powinno być unikalne, zawierać małe litery, duże litery, cyfry i znaki specjalne oraz mieć odpowiednią długość.

Co to znaczy „odpowiednia długość”?

Chociaż procesory są coraz szybsze, a ich moc obliczeniowa – większa, to na domowym komputerze złamanie hasła o długości tylko ośmiu znaków, ale stworzonego zgodnie z tymi zasadami, może zająć nawet 45 lat. Jednak użycie GPU, czyli procesora graficznego, pozwala na znaczne skrócenie tego czasu (do około 165 dni). A jeśli do złamania hasła zostanie wykorzystany superkomputer, lub tzw. chmura obliczeniowa, okaże się, że hasło przestało być bezpieczne – i haker pozna je już w 4 godziny.

Bezpiecznie, szczególnie jeśli myślimy przyszłościowo, jest używać haseł dłuższych, to znaczy zawierających minimum 10 znaków, których złamanie w chmurze lub przez superkomputer może zająć około 3 lat.

Odsyłamy do ciekawego wpisu na Twitterze:
https://twitter.com/tinkersec/status/1096046635593928704. Informuje on, że ośmioznakowe hasło może zostać złamane w ciągu 2,5 godziny przy użyciu ośmiu kart graficznych RTX 2080 Ti – w chwili pisania tego artykułu dostępne są już nowsze, wydajniejsze karty o numerze 3080.

W przypadku stron www najczęściej mamy do czynienia z kilkoma różnymi hasłami:

  • hasło do hostingu,
  • hasło do serwera FTP,
  • hasło do bazy danych,
  • hasło do systemu zarządzania treścią (np. WordPressa),
  • hasło do skrzynki e-mail.

Może się zdarzyć, że główne hasło do serwera FTP będziemy mieć domyślnie ustawione takie samo jak do panelu usług hostingowych. Jeśli możemy powinniśmy je zmienić i również każde z wcześniej wymienionych haseł powinno być inne. W razie problemów z zapamiętaniem różnych, składających się z losowych znaków haseł, możemy użyć menedżera haseł takiego jak NordPass, LastPass czy KeePass.

2. Uwierzytelnianie dwupoziomowe

Warto (tam, gdzie to możliwe) używać także uwierzytelniania dwupoziomowego, czyli potwierdzania logowania kodem przesłanym w wiadomości SMS lub w aplikacjach takich jak Authy lub Google Authenticator. Dzięki temu nawet jeśli ktoś pozna nasze hasło, nie będzie mógł się zalogować.

3. Konta i udzielanie dostępu

Jeśli musimy udzielić komuś dostępu na przykład do WordPressa lub serwera FTP, powinniśmy stworzyć dla tej osoby oddzielne konto i nie podawać własnych danych dostępowych – w ten sposób zyskamy pewność, że tylko my znamy swoje hasło. Dodatkowo wiemy, kto dokładnie do czego ma dostęp, i w razie potrzeby możemy ten dostęp odebrać.

4. Certyfikat

Zadbajmy też o certyfikat bezpieczeństwa dla naszej strony www, tak by była ona dostępna pod protokołem https, a nie – http, co zapewni szyfrowane połączenie ze stroną internetową. Gdy mamy zainstalowany taki certyfikat, w pasku adresu przeglądarki będzie widoczna ikona kłódki.

5. Ograniczenie liczby prób logowania

Dobrym pomysłem jest ograniczenie liczby prób logowania do panelu administracyjnego systemu zarządzania treścią. W przypadku WordPressa najprostsze i najszybsze rozwiązanie to zainstalowanie wtyczki Limit Login Attempts Reloaded lub podobnej. Po kilku nieudanych próbach na jakiś czas (domyślnie: 20 minut) blokuje ona możliwość logowania.

6. Minimum wtyczek

Korzystajmy tylko z tych wtyczek, których potrzebujemy. Reszta powinna zostać nie tylko wyłączona, ale też całkiem usunięta, by ich kod nie był dostępny. Nawet w powszechnie używanych wtyczkach zdarzają się luki mogące narazić naszą stronę na niebezpieczeństwo. Dobrym przykładem jest podatność na ataki w Contact Form 7 do WordPressa, występująca jeszcze w grudniu 2019 (https://searchenginejournal.com/contact-form-7-vulnerability-in-5-million-sites).

7. Aktualizacje

Nasz CMS i wtyczki do niego zainstalowane powinny być zawsze aktualne. W przypadku WordPressa możemy włączyć automatyczne aktualizacje w panelu administracyjnym lub dopisując jedną linię kodu w pliku wp-config.php:

define('WP_AUTO_UPDATE_CORE', true);

oraz tworząc plik o dowolnej nazwie i rozszerzeniu php (np. updates.php) w katalogu /wp-content/mu-plugins/ o zawartości:

add_filter( 'allow_minor_auto_core_updates', '__return_true' );
add_filter( 'allow_major_auto_core_updates', '__return_true' );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
add_filter( 'auto_update_translation', '__return_true' );

8. Zabezpieczenie plików WordPressa

Przez dodanie we wcześniej już wspomnianym pliku wp-config.php linii:

define('DISALLOW_FILE_EDIT', true);

wyłączymy możliwość edytowania plików strony z poziomu panelu WordPressa, na wypadek gdyby dostał się do niego ktoś niepowołany.

Natomiast w celu zabezpieczenia samego pliku wp-config.php na serwerze powinniśmy do pliku .htaccess dodać następujący kod:

<Files .htaccess wp-config.php>
order allow,deny
deny from all
</Files>

Przy pomocy pliku .htaccess możemy zablokować również dostęp do innych plików, nie tylko do wp-config.php.

9. Kopie zapasowe

Ostatnią, ale nie najmniej ważną rzeczą, o której musimy pamiętać, są kopie zapasowe – zarówno bazy danych, jak i plików strony. Dobrze, jeśli taką kopię trzymamy nie tylko na hostingu strony, lecz także na innym serwerze (znajdującym się w innej lokalizacji) lub lokalnie na dysku. Najlepiej, jeśli taka kopia zapasowa będzie również zaszyfrowana.

Tworzenie takich kopii zapasowych można skonfigurować z poziomu hostingu albo przy użyciu odpowiedniej wtyczki do systemu zarządzania treścią, takiej jak UpdraftPlus w przypadku WordPressa.