Kontakt z pomocą

Odpowiadamy e-mailem, zwykle w ciągu dwóch dni.

Google reCAPTCHA sprawdza to zgłoszenie pod kątem nadużyć; dane trafiają do Google. Skrypt ładuje się dopiero po otwarciu formularza.

← Wszystkie wpisy

Sprawdzanie curlem sprawdza nie to, co trzeba

Wywołanie licznika, które przychodzi bez identyfikatora przeglądarki, zapisuje w dwóch z dwunastu miejsc, które policzona wizyta zwykle porusza. Odpowiada 200. Zwraca poprawny obrazek licznika. Nigdzie nie stoi, że dziesięć z dwunastu zostało pominiętych.

bez identyfikatora — 2 z 12 domyślny curl — 2 z 12 z identyfikatorem przeglądarki — 10 z 12 wszystkie trzy odpowiedziały 200 działającym obrazkiem licznika

Po co jest ten filtr i co kosztuje

Liczniki oddzielają tu roboty od ludzi, a rozdziela się po identyfikatorze, który klient podaje o sobie. Lista znaczników jest krótka i celowo jednoznaczna, a curl/ na niej stoi. Pusty identyfikator też, z rozumowaniem, że wywołanie zupełnie bez identyfikatora nie jest przeglądarką.

Jedno i drugie jest słuszne. Usługa nie myli się, traktując gołe curl jak robota; tym właśnie jest. Kłopot w tym, że osoba prowadząca curla zwykle nie sprawdza, czy działa wykrywanie robotów. Sprawdza, czy działa liczenie — i po cichu zamówiła ścieżkę dla robota.

Co dostaje: dzienna suma trafień rośnie o jeden, kolumna botów rośnie o jeden, i tyle. Żadnego wiersza dla niepowtarzalnego odwiedzającego, więc nic o odwiedzających. Żadnego wpisu na liście online. Żadnej strony, kraju, przeglądarki, systemu, urządzenia, godziny. Dokładnie te części, które ktoś chciałby sprawdzić, są tymi, które nie zadziałały.

Ta porażka nie ma objawu

To ta część, przy której warto się zatrzymać. Sprawdzian, który nic nie mierzy, zwykle się zgłasza: błąd, puste wyniki, zero tam, gdzie powinna być liczba. Tutaj odpowiedź to 200. Treść to prawdziwy obrazek licznika, 3361 bajtów. Liczba na obrazku nawet urosła, bo dzienna suma to jedna z dwóch rzeczy, które się wydarzyły.

Próba wygląda więc na zaliczoną. Wszystko, co z niej wynika — „ścieżka zliczania działa", „nowa kolumna jest zapisywana", „zmiana niczego nie zepsuła" — jest wnioskiem z przebiegu, który pominął większość kodu, jaki miał sprawdzić.

Zdarzyło się przy pisaniu

Pierwsza wersja pomiaru stojącego za tym wpisem wywoływała /c/<numer>. To nie jest adres obrazka licznika; prawdziwy niesie wzór i rozszerzenie, /c/<numer>-<wzór>.png. Wywołanie odpowiedziało 404.

Skrypt zgłosił trzy razy: zapisuje w 0 z 12 miejsc. Co jest prawdą — i co zarazem wygląda dokładnie tak jak działający filtr botów, gdy się zmruży oczy. Odpowiedź 404 stała w tej samej tabelce, wiersz wyżej niż zera. Przez minutę pozostała nieprzeczytana, bo zera były tym ciekawym i pasowały do oczekiwań.

To ten sam błąd co ten, o którym mowa, tylko piętro wyżej: pomiar, który dał prawdopodobny wynik z niesprawdzonego powodu. Złapano go tylko dlatego, że skrypt liczy wiersze w dwunastu tabelach zamiast wierzyć wywołaniu — wywołanie, które upada, i takie, które jest odfiltrowane, z zewnątrz wyglądają tak samo.

Co robić zamiast tego

Wysłać identyfikator przeglądarki. Jeden przełącznik, -A z prawdziwym identyfikatorem, i to samo wywołanie zapisuje w dziesięciu, a nie w dwóch z dwunastu miejsc.

I policzyć po drugiej stronie. Kod odpowiedzi mówi, że wywołanie dotarło; nie mówi, co zrobiło. Wszędzie tam, gdzie chodzi o skutek uboczny — licznik, kolejka, wiersz w dzienniku, wiersz gdziekolwiek — próba musi obejrzeć ten skutek. Liczenie przed i po we wszystkich zaangażowanych tabelach zajęło tu dwadzieścia wierszy i dwa razy zamieniło wynik dwuznaczny w jednoznaczny: raz dla filtra, raz dla 404.

Dwa z dwunastu miejsc pozostały puste także z identyfikatorem przeglądarki: kolumna botów, słusznie, i lista odsyłaczy, która nie przyjęła wysłanego odsyłacza. To drugie nie jest tu wyjaśnione, bo jeszcze go nie prześledzono. Stoi tu, bo alternatywą byłoby pokazać tabelę z jedenastoma wierszami i powiedzieć dwanaście.

Reklama