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:
$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ę ;-)
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.
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”.
Na hackingu piszą że Chuck Norris wykupiłby sobie miejsce w tej samej serwerowni co NK, więc jego czas skopiowania wszystkich danych byłby równy 25 kopnięciom z półobrotu :)
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
Ale to jest takie 100% na zasadzie “bo tak” czy masz jakieś podstawy by tak sądzić?
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
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?
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.
Nie wiem czy zauważyliście, ale już się skapnęli i po obejrzeniu 15 musisz wpisać znak z obrazka :)
Czy można jakoś sprawdzić kto był właścicielem konta usuniętego?
Bardzo bym prosiła o odpowiedź