Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

Audyt .htaccess: błąd 500, martwe dyrektywy, ślady włamania

Audyt .htaccess: dlaczego witryna zwraca 500 i które reguły nie działają

Przeciągnij plik — narzędzie znajdzie BOM, martwe dyrektywy, reguły z wysokim ryzykiem błędu 500 oraz ślady obcej ingerencji. Plik jest czytany w Twojej przeglądarce i nigdzie nie jest wysyłany.

Kontrole bajtowe — BOM, CRLF, znaki niedrukowalne i niewidoczne — są możliwe tylko dla pliku. Przy wklejaniu ze schowka przeglądarka już je usuwa, więc najczęstsza przyczyna błędu 500 staje się niewidoczna.
Analiza uruchamia się automatycznie. Plik nigdzie nie jest wysyłany — czyta go Twoja przeglądarka.
Kontekst

Czysty .htaccess nie leczy włamania. Jeśli witryna jest przejęta, złośliwy kod żyje w PHP, a .htaccess jest tylko jego skutkiem: dropper nadpisze plik z powrotem w ciągu kilku minut od wyczyszczenia. Kolejność jest odwrotna — najpierw znaleźć wykonywalny kod, potem porządkować konfigurację.

Plik jest czytany w Twojej przeglądarce — jego zawartość nigdzie nie jest wysyłana ani zapisywana.

Dlaczego plik, a nie wklejony tekst

Najczęstsza przyczyna błędu 500 po edycji .htaccess w ogóle nie jest widoczna w tekście. To BOM — trzy niewidzialne bajty na początku pliku, dodawane przez Notatnik Windows przy zapisie w UTF-8. Apache uznaje je za część pierwszej dyrektywy i nie potrafi jej przetworzyć. Dlatego narzędzie przyjmuje właśnie plik: tylko tak da się odczytać bajty i zobaczyć BOM, końce wierszy w stylu Windows oraz niewidzialne znaki wewnątrz wierszy. Druga grupa problemów to dyrektywy, które nic nie robią, ale wyglądają na działające. mod_gzip_on to składnia Apache 1.3; na współczesnych serwerach jest po cichu ignorowana, a ludzie latami sądzą, że kompresja jest włączona. Blok ExpiresByType opakowany w sprawdzenie mod_headers.c zamiast mod_expires.c też nie zadziała — i bez podpowiedzi tego nie widać. Trzecia sprawa to php_value i php_flag. Działają tylko wtedy, gdy PHP jest podłączony jako moduł Apache. Na nowoczesnych hostingach z PHP-FPM taki wiersz albo jest ignorowany, albo od razu daje 500. I osobno o bezpieczeństwie: jeśli w pliku znaleziono reguły przekierowujące odwiedzających w zależności od tego, z jakiej wyszukiwarki przyszli, albo ukrywające przekierowanie przed administratorem — to typowy objaw włamania. Ale czysty .htaccess nie leczy włamania: prawie zawsze gdzieś w plikach siedzi skrypt PHP, który zapisze go z powrotem.

Częste pytania