O tym jak to Chuck Norris skopiował dane z Naszej Klasy na dyskietkę

Hacking.pl opublikował artykuł Nasza-Klasa.pl – pobierz sobie dane milionów Polaków. Zasugerowano w nim, że każdy może pobrać dane wszystkich użytkowników Naszej-Klasy. Na alarm uderzył również Dziennik Internautów i Computerworld. Wszyscy zwrócili uwagę na fakt, że prosty robot internetowy może skopiować strony z portalu, przefiltrować ciekawe informacje i zapisać je na dysku. Niestety większości umknął jeden ważny problem… czas potrzebny do skopiowania 8 milionów stron.

Prosty skrypt w PHP korzystający z biblioteki cURL może wyglądać tak:

function getProfile($id) {
    $ch = curl_init("http://nasza-klasa.pl/profile/$id");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_COOKIE, "nk_session=[ tu wpisać identyfikator sesji ]");
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; U; en)");
    return curl_exec($ch);
}

function parseProfile($rawData) {
    preg_match_all('/wartosc">(.*)</iU', $rawData, $m, PREG_SET_ORDER);
    return $m[0][1] . "," . $m[1][1] . "," . $m[2][1] . "," . $m[3][1] . "," . $m[4][1] . "," .
       $m[5][1] . "," . $m[6][1] . "," . $m[7][1] . "," . $m[8][1] . "," . $m[9][1];
}

$fh = fopen("nk.log", 'a') or die("plik nie chce się otworzyć :-(");

$i = 4085305;

while ($i < (4085305 + 25)) {
    echo "$i ";
    fputs($fh, $i . "," . parseProfile(getProfile($i)) . "\n");
    ++$i;
}

fclose($fh);

A czas jego wykonania? Na moim komputerze (i łączu internetowym) pobranie 25 profili, zaczynając od mojego, trwa:

/usr/bin/time -v php5 nk.php 2>&1 | grep wall
	Elapsed (wall clock) time (h:mm:ss or m:ss): 6:39.42

Policzmy zatem. 8 milionów profili do pobrania. ~6 i pół minuty na każde 25 z nich.

( ( ( 8000000 / 25 ) * 6.5 ) / 60 ) / 24 = 1444.(4) dni
1444.(4) / 365 =~ 3.95738 lat

Już po 4 latach pobierania profili miałbym komplet danych użytkowników Naszej Klasy. Nie ma zatem realnych szans na skopiowanie wszystkich danych z Naszej Klasy. Chyba, że… zrobi to Chuck Norris. Tak samo jak kiedyś skopiował cały Internet na dyskietkę ;-)

10 thoughts on “O tym jak to Chuck Norris skopiował dane z Naszej Klasy na dyskietkę”

  1. Tyle, że można zrównoleglić pobieranie. Procesor przy tym nie jest obciążony, ani nawet łącze. Czas tutaj zdominowany jest przez oczekiwanie na dane. Więc 1 profil na sekundę na jeden komputer/łącze jest realne. Po za tym w nocy jest szybciej. Czyli 8 mln profili da się pobrać w 3 miesiące jednym komputerem.

  2. Pobierając 1 profil na sekundę gdy każdy profil ma ponad 3 KB dziennie odwiedzisz ~80000 profili i pobierzesz ~250 MB danych. Profili jest 8 milionów co wymaga przesłania ~24GB danych. Jednym komputerem byłoby trudno zrobić to “po cichu”.

  3. taaa……..
    sprawdź sobie dane które twój skrypt pobiera ;)
    bo na 100% to są specjalnie spreparowane dane ;) które nie mają nic wspólnego z rzeczywistością;)
    cheers

  4. Tak jak Azreal Nightwalker napisał: maszyna w ich serwerowni albo jakiejkolwiek serwerowni ZNACZNIE zmienia postać rzeczy, więc deklaracja “Nie ma zatem realnych szans na skopiowanie wszystkich danych z Naszej Klasy.” jest trochę na wyrost. Nie wiadomo tylko czy nasza klasa śledzi kto korzysta z ich usług, curl nie pozostawia chyba śladów w google analytics, którego z tego co widzę używa n-k.

    Podsumowanie – nie przeszkadzałoby mi gdyby ktoś sobie zrobił z n-k bazę danych, ale zdecydowanie jest to możliwe

  5. po przetestowaniu skryptu zalogowalem sie normalnie na nk, ale po otworzeniu czyjegos profilu pojawiaja sie zupelnie inne dane ;>
    przykladowo w wyszukiwarce wpisuje dane i wyswietla Janek Kowalski z Warszawy, ale po otworzeniu jego profilu sa inne dane ;>
    jakies zabezpieczenie?

  6. Wydaje mi się to nieco niewiarygodne. Jeśli mamy ciasteczka i identyczny user agent, jak zwykła przeglądarka to powinno działać. Sprawdziłem, że dla kilku profili działa poprawnie. Jedyne co przychodzi mi na myśl to sprawdzanie ile w sesji odwiedzono profili. Jeśli przekroczona zostanie ustalona ilość wysyłane są losowe dane. Ale to jedynie przypuszczenia.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.