Oprócz odpowiedzi Andersa, znalazłem sposób na wykrycie niektórych przypadków, w których 404 jest niewłaściwie używane z atakiem Czas. Jest jednak mało wiarygodny.
- Wyślij 404 zamiast 403, aby ukryć zasób wymagający uwierzytelnienia.
Często serwery potrzebują więcej czasu, aby określić, że „nie masz pozwolenie, aby uzyskać ten zasób”, ponieważ potrzebują więcej roundtrips do zasobów zewnętrznych, takich jak bazy danych, a następnie muszą ustalić, „to nie jest tam”, dość często nawet cacheable i szybko określić.
Typowym przykładem w aplikacji MVC z RDBS jako backendem jest różnica między prostym SELECT COUNT(id) FROM articles WHERE id=123 LIMIT 1
a znacznie bardziej złożonym SELECT access FROM accesses JOIN articles ON articles.id = accesses.foreign_id WHERE articles.id = 123 AND accesses.type='articles' AND accesses.user_id = (SELECT id FROM users WHERE token='t0k3n' LIMIT 1)
. A to oznacza, że aplikacja może w pierwszej kolejności tworzyć takie zapytania o pojedynczą linię: częściej jest to dużo "pobierz użytkownika, wyodrębnij dane, teraz pobierz rzecz, zapytaj teraz, jeśli użytkownik może uzyskać do niego dostęp za pośrednictwem autoryzacji" api ".
ile twórcy lub ramy miejscu zadbał aby pokryć tę sprawę dość często zobaczysz zauważalną różnicą w czasie, aby służyć zarówno przypadki 404.
- Wyślij 404 zamiast 500, aby ukryć fakt, że coś nie działa.
Zazwyczaj awarie lub nieoczekiwane błędy występują tylko po uruchomieniu kodu. Wykrywanie 404 często przychodzi wcześnie: w końcu taniej jest stwierdzić, że czegoś tam nie ma (patrz wyżej). Błąd wystąpiłby później. Oznacza to, że taki błąd 500-ukryty-jak-404, często zajmuje o wiele więcej czasu, niż normalny 404.
- Wysyłaj 404, gdy Twój adres IP jest zablokowany z jakiegoś powodu.
W tym przypadku czas jest często odwrotny, w zależności od implementacji. Takie blokowanie adresów IP często jest utrzymywane poza aplikacją internetową (CMS itp.), Ponieważ jest znacznie prostsze i wydajniejsze, aby obsługiwać wyżej w stosie: serwer WWW, serwer proxy itp. Jednak, gdy sama aplikacja zajmuje się to, generowanie faktycznego 404 jest często rozsądnie tanie, podczas gdy szukanie adresu IP w bazie danych, stosowanie masek itd. zajmuje trochę czasu. Podobnie jak w przypadku ukrycia 403 jako 404.
Kody stanu HTTP, takie jak 404, można uzyskać w bardziej wiarygodny sposób, patrząc na odpowiedź HTTP. Na przykład, zobacz http://www.tcpipguide.com/free/t_HTTPResponseMessageFormat.htm –
@ A.Darwin Chciałbym przepisać nieco komentarz i opublikować jako odpowiedź – Purefan
Cytując niektóre strony, proszę podać bezpośredni link do masz cytat z. Dziękuję Ci! – Anders