Błąd 403 Forbidden: co blokuje dostęp do Twojej strony
· 6 min czytania
Co oznacza ten błąd
403 to serwer WWW, który żądanie rozumie, ale odmawia jego obsługi. Nie chodzi o brak strony (to byłby 404) ani o awarię aplikacji (błąd 500); ktoś albo coś zdecydowało, że ten odwiedzający nie dostanie tego adresu. Decyzję mogą podjąć uprawnienia plików w systemie, reguła w .htaccess lub nginx, moduł bezpieczeństwa (ModSecurity, WAF), firewall aplikacyjny CDN albo wtyczka w WordPressie.
Jeśli błąd 403 widzisz na cudzej stronie, zwykle jesteś poza grupą, która ma do niej dostęp, albo Twój adres został zablokowany. Jeśli widzisz go na własnej stronie, przyczyna jest w konfiguracji i ten poradnik pokazuje, gdzie jej szukać.
Częste przyczyny
- Uprawnienia plików i katalogów. Pliki bez prawa odczytu dla użytkownika serwera WWW, katalogi bez prawa wykonywania, zły właściciel po przeniesieniu strony przez SFTP jako root.
- Brak pliku index. Katalog bez
index.html/index.phpi wyłączone listowanie: Apache odpowiada 403 zamiast listy plików. - Reguła
denyw.htaccessalbolocationw nginx. Blokada adresów IP, krajów, user agentów albo całego katalogu (wp-admin,xmlrpc.php), wstawiona ręcznie lub przez wtyczkę. - ModSecurity / WAF. Reguła uznała żądanie za atak (najczęściej zapis w edytorze, formularz z kodem HTML, upload pliku) i odrzuciła je kodem 403, czasem z pustą białą stroną.
- Wtyczka bezpieczeństwa WordPressa. Blokada po nieudanych logowaniach, lista krajów, „ukryte”
wp-login.php; obejmuje też Ciebie, jeśli logujesz się z nowego adresu. - Blokada geograficzna lub bot w CDN. Cloudflare „Firewall Rules”, „Bot Fight Mode” albo wyzwanie, które nie zostało rozwiązane.
- Hotlink albo referer. Reguła chroniąca obrazki przed podlinkowaniem z innych stron, która blokuje też własne podstrony.
- Zawieszone konto hostingowe. Dostawca pokazuje 403 dla całej domeny po nieopłaconej fakturze albo nadużyciu.
Jeśli odwiedzasz cudzą stronę
- Sprawdź adres:
https://przyklad.pl/wp-content/bez nazwy pliku to 403 z założenia. - Spróbuj z innej sieci (telefon bez Wi-Fi) i w oknie prywatnym; blokada adresu albo kraju zniknie, blokada strony nie.
- Wyłącz VPN, bo wyjściowe adresy VPN często są na listach blokad.
- Jeśli to strona, na której masz konto, zaloguj się ponownie; wygasła sesja też potrafi kończyć się 403.
Jeśli to Twoja strona: najpierw sprawdź
Narzędzie Is it down? odpowiada z neutralnego adresu: 403 także stamtąd oznacza blokadę dla wszystkich, 200 stamtąd przy 403 u Ciebie oznacza, że zablokowany jest Twój adres, kraj albo przeglądarka. Potem sprawdź, czy błąd dotyczy całej strony, jednego katalogu czy jednego żądania (np. zapisu wpisu):
curl -sI https://przyklad.pl/ | head -n 1
curl -sI https://przyklad.pl/wp-admin/ | head -n 1
curl -sI -A 'Mozilla/5.0' https://przyklad.pl/ | head -n 1
Na serwerze log mówi, kto odmówił:
# Apache: „client denied by server configuration” albo „AH01630”
sudo tail -n 50 /var/log/apache2/error.log
# nginx: „directory index of … is forbidden” albo „access forbidden by rule”
sudo tail -n 50 /var/log/nginx/error.log
# ModSecurity
sudo tail -n 50 /var/log/modsec_audit.log
Naprawy na własnym serwerze albo hostingu z SSH
1. Uprawnienia i właściciel
ps aux | grep -E 'nginx|apache|php-fpm' | head -n 3 # jaki użytkownik serwuje stronę?
sudo chown -R www-data:www-data /var/www/przyklad.pl
find /var/www/przyklad.pl -type d -exec chmod 755 {} \;
find /var/www/przyklad.pl -type f -exec chmod 644 {} \;
Na hostingu właścicielem jest Twój użytkownik SSH, a serwer działa z jego prawami; sprawdź w panelu i nie używaj 777.
2. Plik index i listowanie
Upewnij się, że w katalogu jest index.php albo index.html, a w nginx dyrektywa index index.php index.html;. W Apache DirectoryIndex index.php index.html. Listowanie katalogów zostaw wyłączone.
3. Reguły deny
grep -nEi 'deny|require|order' /var/www/przyklad.pl/.htaccess
sudo nginx -T | grep -nE 'deny|allow|return 403'
Usuń albo zawęź regułę, która blokuje więcej, niż miała (np. deny from all w katalogu głównym zamiast w wp-includes). Zmianę w .htaccess sprawdzisz od razu; nginx wymaga sudo nginx -t && sudo systemctl reload nginx.
4. ModSecurity i WAF
Znajdź w modsec_audit.log identyfikator reguły (id "9410xx") i wyłącz ją dla jednego adresu zamiast całego modułu:
<LocationMatch "/wp-admin/post.php">
SecRuleRemoveById 941100
</LocationMatch>
W Cloudflare: Security → Events pokazuje, która reguła zatrzymała żądanie; dodaj wyjątek („Skip”) dla swojego adresu albo ścieżki.
5. Wtyczka bezpieczeństwa WordPressa
wp plugin list --status=active
wp plugin deactivate wordfence
Jeśli po wyłączeniu wtyczki 403 znika, w jej ustawieniach zdejmij blokadę swojego adresu albo kraju, zamiast zostawiać ją wyłączoną. Bez WP-CLI zmień nazwę katalogu wtyczki przez SFTP.
6. Hotlink i referer
Reguła chroniąca obrazki musi dopuszczać pustego referera i własną domenę: w nginx valid_referers none blocked server_names *.przyklad.pl;, w Apache analogiczny warunek RewriteCond %{HTTP_REFERER} !^$.
Gdy to problem dostawcy hostingu
Jeśli 403 obejmuje całą domenę, w panelu nie ma reguł, a uprawnienia są w porządku, pytaj dostawcę o blokadę konta albo regułę ModSecurity po jego stronie:
Dzień dobry, moja strona przyklad.pl zwraca „403 Forbidden” od około 11:30 UTC dla wszystkich adresów, także w sprawdzeniu z zewnątrz. Uprawnienia plików i .htaccess sprawdzono, po mojej stronie nic się nie zmieniło. Czy moje konto jest zablokowane albo czy reguła ModSecurity/WAF po Państwa stronie odrzuca żądania do mojej domeny? Proszę o identyfikator reguły, jeśli tak.
Jak zapobiec następnemu
Błąd 403 na własnej stronie pojawia się po zmianie: nowa wtyczka, nowa reguła, przeniesienie plików. Sprawdzanie HTTP w monitoringu stron wysyła alert przy kodzie 403 w ciągu minut, także dla podstrony, którą monitorujesz osobno (np. koszyk). Awaria? Naprawiamy: Quick Fix usuwa częste proste przyczyny po teście, z kopią zapasową, w stałej cenie; reguły ModSecurity, blokady wtyczek i konfigurację serwera porządkuje Deep Fix. Zobacz naprawa serwera i naprawa WordPressa na żądanie. Blokada z powodu zbyt wielu żądań ma własny kod: błąd 429 Too Many Requests.
Co teraz
Sprawdź z zewnątrz
Strona nie działa u wszystkich czy tylko u Ciebie i co odpowiada serwer? Za darmo, bez rejestracji.
Is it down? Sprawdź, czy strona działaAwaria? Naprawiamy.
Na Twoim własnym serwerze albo na hostingu z dostępem SSH: Quick Fix w stałej cenie na częste przyczyny, Deep Fix rozliczany w blokach po 15 minut na resztę, przez całą dobę. Cena przed zamówieniem.
Zamów naprawęWięcej poradników
- Strona nie działa: co zrobić w pierwszych 15 minutach
- Awaria serwera: co sprawdzić i w jakiej kolejności
- Błąd 500 Internal Server Error: znajdź przyczynę w logach i przywróć stronę
- Błąd 502 Bad Gateway: znajdź przyczynę i napraw
- Błąd 503: przeciążenie, konserwacja czy limit hostingu?
- Błąd 504 Gateway Timeout: znajdź, co spowalnia stronę
- Błąd 521 i 522 w Cloudflare: serwer źródłowy nie odpowiada
- DNS_PROBE_FINISHED_NXDOMAIN: domena przestała odpowiadać
- ERR_CONNECTION_REFUSED: serwer odrzuca połączenie
- ERR_CONNECTION_TIMED_OUT: serwer nie odpowiada na czas
- Co oznacza „Połączenie nie jest prywatne” i jak to naprawić
- ERR_SSL_PROTOCOL_ERROR: bezpieczne połączenie zawodzi przed certyfikatem
- ERR_TOO_MANY_REDIRECTS: znajdź pętlę przekierowań i ją przerwij
- ERR_NAME_NOT_RESOLVED: nie można znaleźć nazwy strony
- „Błąd podczas nawiązywania połączenia z bazą danych” w WordPressie: przyczyna i naprawa
- ERR_CONNECTION_RESET: dlaczego połączenie zrywa się w połowie
- Błąd 429 Too Many Requests: który limit blokuje odwiedzających
- ERR_EMPTY_RESPONSE: serwer nie wysłał żadnych danych
- Błąd krytyczny WordPress: znajdź przyczynę i przywróć stronę