Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jeden user = 1 konto
Forum PHP.pl > Forum > PHP
andycole
Witam,

Prowadze gre internetowa, w ktorej zalezy mi na tym, zeby 1 uzytkownik mial 1 konto.
Ewentualnie maksymalnie jak to mozliwe utrudnic zalozenie 2 konta.

W tej chwili mam rejestracje z aktywacja poprzez adres e-mail.

Macie jakies inne pomysly?

Po IP nie ma co sprawdzac, po przegladarce tak samo niestety :/
gothye
możesz jeszcze spróbować wykorzystać $_COOKIE ,ale to można ominąc przez usunięcie ciasteczek w przeglądarce
MateuszS
Niestety to chyba jedyne sensowne rozwiązania, najlepiej poprzez spr. emaila i IP z warunkiem z OR.

Jezeli(w bazie jest takie ip lub taki email jest zajety)
{
nie możesz się zarejestrować
}


Jak chcesz to dorzuć do tego Cookie
andycole
Cookies niestety jest za slabym zabezpieczeniem, bo po 1 mozna uzyc innej patrzajki lub po 2 mozna (jak pisaliscie) usunac cookie sad.gif

Co do IP, czasami wielu wielu ludzi ma takie samo IP (sieci, szkoly itp), poza tym IP jest dynamiczne coraz czesciej... sad.gif
Kshyhoo
Musisz rejestrować wszystko, co może wyróżnić usera, czyli IP, cookie, przeglądarka, system, email, czasy logowania, wszelkie ruchy między kontami (surowce, wojska, itp)... Potem porównywać wpisy, szukać zbieżności. Niestety, nie ma złotego środka. Super, jakby można poznać adres MAC karty sieciowej, to by wyróżniło komputer, z którego łączy się user, ale to tylko możliwe w obrębie sieci. Administrowałem kiedyś grami, wiec trochę liznąłem tematu. Dobry admin potrafi z dobrze zapisanych danych wyciągnąć wiele wniosków ;p
Kszyhuu
Kiedyś prowadząc grę widziałem, że było to zrobione w dość prosty sposób, niewymagający wielkiego nakładu sił, a przynoszący dobre efekty.

1) Zrób plik np multicheck.php. W części html'owej daj forma gdzie wpisuje się id początkowe i id końcowe przedziału. W php zrób zapytanie, które pokaże Ci graczy o takim samym IP z tego przedziału.
  1. <form method="post" action="multicheck.php">
  2. id początkowe: <input type="text" name="id1"/>
  3. id końcowe: <input type="text" name="id2"/>
  4. <input type="submit" value="Wyszukaj" />

A w części php daj zapytanie i prześlij później wynik do html. Masz zapytanie, zmienisz tabele i kolumny i będzie si:
  1. $result = $db -> EXECUTE("SELECT
  2. p.ip,
  3. p.id as pl1_id,
  4. p.user as pl1_nick,
  5. p.email as pl1_email,
  6. p2.id as pl2_id,
  7. p2.user as pl2_nick,
  8. p2.email as pl2_email
  9. FROM `players` p JOIN players p2 USING(ip)
  10. WHERE p.id!=p2.id
  11. AND ip!=''
  12. AND p.id BETWEEN $_POST[id1] AND $_POST[id2]
  13. ORDER BY ip, pl1_id, pl2_id");

2) Zrób w modułach plik zapisujący do bazy każdą akcję użytkownika, zapisując tam datę, id, id2(gracza, któremu coś przekazujemy etc.), ip, co zostało wpisane w okienko form/textarea, nazwę pliku.
3) Zrób przeglądarkę tych logów. W html daj forma, w którego wpisuje się daną rzecz (tę datę/ip/coś innego) i obok checkboxa, odwracającego wynik. Czyli np jeśli wpiszesz w id 50 i zaznaczysz checkboxa, to wynikiem będzie każde id poza 50. Pokażę Ci tpl'kę i php żebyś miał porównanie, przerobisz sobie:
  1. <table width="200%">
  2. <tr>
  3. <td>datestamp(data)</td>
  4. <td>fid(ID gracza)</td>
  5. <td>sid</td>
  6. <td>ip</td>
  7. <td>what</td>
  8. <td>much</td>
  9. </tr>
  10. <form method="post" action="logi.php?step=do">
  11. <tr>
  12.  
  13. <td><input type="checkbox" name="d" value="true"><input type="text" name="datestamp" size="5"></td>
  14. <td><input type="checkbox" name="f" value="true"><input type="text" name="fid" size="5"></td>
  15. <td><input type="checkbox" name="s" value="true"><input type="text" name="sid" size="5"></td>
  16. <td><input type="checkbox" name="i" value="true"><input type="text" name="ip" size="5"></td>
  17. <td><input type="checkbox" name="w" value="true"><input type="text" name="what" size="5"></td>
  18. <td><input type="checkbox" name="m" value="true"><input type="text" name="much" size="5"></td>
  19. </tr>
  20. <tr>
  21. <td><input type="submit" value="Szukaj!"></td>
  22. <td></td>
  23. <td></td>
  24. <td></td>
  25. <td></td>
  26. <td></td>
  27. </tr>
  28. </form>
  29. {if $step == 'do'}
  30. {section=list}
  31. <tr>
  32. <td>{$list.datestamp}</td>
  33. <td>{$list.fid}</td>
  34. <td>{$list.sid}</td>
  35. <td>{$list.ip}</td>
  36. <td>{$list.what}</td>
  37. <td>{$list.much}</td>
  38. </tr>
  39. {/section}
  40. {$error}
  41. {else}
  42. {/if}

  1. <?php
  2. define('LOGGS_PER_PAGE', 300);
  3. if (!isset($_GET['step'])) $_GET['step'] = '';
  4. if(!isset($_SESSION['logtab']))
  5. $_SESSION['logtab']='logging';
  6.  
  7. if ($_GET['step'] == 'do'){
  8. $qq = array();
  9. if(empty($_POST['from'])) $_POST['from']=0;
  10. if(!empty($_POST['datestamp'])) $qq[] = 'datestamp '.(empty($_POST['d'])? '' : 'not ').'like \'%'.$_POST['datestamp'].'%\'';
  11. if(!empty($_POST['fid'])) $qq[] = 'fid'.(empty($_POST['f'])? '' : '!').'='.$_POST['fid'];
  12. if(!empty($_POST['sid'])) $qq[] = 'sid'.(empty($_POST['s'])? '' : '!').'='.$_POST['sid'];
  13. if(!empty($_POST['ip'])) $qq[] = 'ip '.(empty($_POST['i'])? '' : 'not ').'like \'%'.$_POST['ip'].'%\'';
  14. if(!empty($_POST['what'])) $qq[] = 'what '.(empty($_POST['w'])? '' : 'not ').'like \'%'.$_POST['what'].'%\'';
  15. if(!empty($_POST['much'])) $qq[] = 'much '.(empty($_POST['m'])? '' : 'not ').'like \'%'.$_POST['much'].'%\'';
  16. $loggs = array();
  17. if(!empty($qq))
  18. {
  19. $query = $db -> Execute('SELECT * FROM '.$_SESSION['logtab'].' where '.implode(' and ', $qq).' order by datestamp ASC limit '.$_POST['from'].', '.LOGGS_PER_PAGE);
  20. while($query && !$query -> EOF){
  21. if($query -> fields['what'] == 'login') $query -> fields['much'] = false;
  22. $loggs[] = $query -> fields;
  23. $query -> MoveNext();
  24. }
  25. if($query)
  26. $query->Close();
  27. }
  28. $tpl->assignGroup(array(
  29. "list" =>$loggs,
  30. "error" => mysql_error(),
  31. "next" => count($loggs)==LOGGS_PER_PAGE,
  32. ));
  33. }
  34.  
  35. $tpl -> assign ("step", $_GET['step']);
  36. $tpl -> parse('loggs.tpl');
  37. ?>

Później tylko w multicheck sprawdzasz podejrzane konta i sprawdzasz ich akcje w logach- czy logują się jedno po drugim, czy zawsze mają to samo ip, czy przesyłają sobie surowce, czy komunikują się przez pocztę z tymi samymi osobami, etc. Sprawdzenie, czy dwa dane konta są multikontami zajmuje około 5 minut. smile.gif
Pilsener
Cytat(andycole @ 4.02.2010, 18:15:49 ) *
Cookies niestety jest za slabym zabezpieczeniem, bo po 1 mozna uzyc innej patrzajki lub po 2 mozna (jak pisaliscie) usunac cookie sad.gif

Co do IP, czasami wielu wielu ludzi ma takie samo IP (sieci, szkoly itp), poza tym IP jest dynamiczne coraz czesciej... sad.gif
- niestety problem stary jak świat.

Ja bym proponował jakiś system weryfikacji oparty głównie o:

1. Gracz deklaruje, że gra z jednego komputera i przeglądarki, zatem ustawiamy mu ciacho, które zapobiega założeniu drugiego konta
2. Gracz deklaruje, że ma stałe IP i tylko z niego będzie grał

Jeśli gracz nie chce tego zadeklarować, bo chce np. grać z komputera w pracy, w domu, z kawiarenki i jeszcze z dwóch laptopów to jesteśmy ugotowani. Wtedy dajemy mu status "niezaufany" i zbieramy wszystkie możliwe informacje, następnie na podstawie tych informacji oraz korzyści wynikających z MA specjalny program w nocy wyszukuje podejrzane konta i wypluwa je rano w postaci raportu, który przegląda moderator/moderatorzy i dokonuje ostatecznej weryfikacji.

Oczywiście należy jakoś zachęcić graczy, by deklarowali, że grają z jednego komputera i przeglądarki - jakieś dodatkowe punkty czy coś.

Oczywiście jest to tylko "jakiś pomysł" i nigdy go nie testowałem w praktyce. Poza tym zostaje Ci cały szereg standardowych rozwiązań by utrudnić MA.
Kshyhoo
@Pilsener, masz rację, tak się właśnie odbywa w praktyce. Oczywiście, że gracz usuwa cookie, zmienia przeglądarki, loguje się z kilku miejsc. Ale rejestrując wszelkie zdarzenia i mając odpowiednie narzędzie do porównania logów, sprawny admin znajdzie prędzej czy później powiązania. Gracze "dojrzali" nie podejmują ryzyka, bo nie chcą stracić konta w grze, przygodni albo szukający sensacji nie są dobrym materiałem na gracza, są raczej "sezonowi". Generalizując, jeżeli masz sporo danych odnoście ruchów gracza na koncie, nie pomoże graczowi usuwanie ciach, zmiana przeglądarki, wchodzenie przez proxy, itp. Bo np. gracz loguje się z jednego konta i przesyła na inne swoje konto surowce. Potem restartuje neostradę (albo wchodzi przez proxy lub używa innego łącza) i używa innej przeglądarki, żeby wejść na inne swoje konto. Jedyne powiązanie w takim wypadku to przesłane surowce. Jak na razie, nie ma się do czego przyczepić. Jednak po kilkunastu dniach, jest po sobotniej imprezie suto zakrapianej i musi mu się schemat... BINGO! Albo kiepsko się uczył i mama nałożyła bana na komputer ;p Loguje się u kumpla, który pomagał mu nielegalnie wspierać się surowcami albo wojskiem. BINGO!
Na właśnie takie przypadki administrator musi być przygotowany. Szczerze powiedziawszy, nie jest problemem odnaleźć graczy wykorzystujących illegal, znacznie trudniej odróżnić grających wg. zasad, ale będących w sieci z innymi. Może być to sieć osiedlowa, biblioteka, kafejka itp. tam loguje się spora grupa graczy, jedno ip, to samo cookie, kilkadziesiąt kont i na dodatek są w jednym klanie, plemieniu, itp. Powiązań mnóstwo, nie wiadomo, kto gra uczciwie a kto próbuje admina w misia zrobić.
Reasumując - rejestracja wszystkich możliwych zdarzeń + porządne narzędzie do ich porównywania...

EDIT. Po za tym, możemy u gracza wymóc niewyłączanie/nie kasowanie cookie... kasujesz, nie grasz.
erix
Cytat
1. Gracz deklaruje, że gra z jednego komputera i przeglądarki, zatem ustawiamy mu ciacho, które zapobiega założeniu drugiego konta
2. Gracz deklaruje, że ma stałe IP i tylko z niego będzie grał

Zapomnieliście chyba o ADSL...
andycole
erix, dokladnie, zmienne IP

czyli z tego co widze brak sposobu bez sprawdzania logow smile.gif

BTW. Moja gra polega na glosowaniu co X minut na Y druzyne, wiec o zadnej pomocy user userowi nie ma mowy w tym kontekscie
erix
Zostaje chyba tylko rejestracja kont i sprawdzanie adresów...
altruista2
Niestety prawda jest taka że jedyna metoda obrony przed multikontami nazywa się:

CZŁOWIEK

Może nie wnoszę do tematu nic nowego, ale niech nikt się nie łudzi że się obroni przed spamem z automatu.

Chyba że masz "fajnych" użytkowników i sami Ci będą raportować, że ktoś robi multikonta smile.gif

A jeśli chodzi o adres IP, to kompletnie trzeba sobie to wybić z głowy, ponieważ jeśli np. ja jestem w podsieci to jest klops.
Np. teraz korzystam z usług generacji (sieć osiedlowa) i nie ma szans żebym sobie coś ściągnął z rapidshare (~500 użytkowników -> 1 adres IP)
andycole
hmn, a uzywajac innych jezykow?
np java? zapisac gdzies na kompie klienta informacje ze ma juz jedno konto?
erix
A użyszkodnik wcale nie ma obowiązku instalować czegokolwiek. Poza tym, zawsze to może wyrzucić.
andycole
jezeli chce zagrac bedzie zmuszony zainstalowac...

ale od strony technicznej da rade?
nakieruje ktos w jaka strone isc? jaki jezyk? serwer? manual jakis?
Van Pytel
Byś musial zrobić gre na kompa np: w C nie przez przegladarke, dać jakiś plik z hashem - unikatowy dla kazdego user, lub w rejestrze jakis zapis, ale to i tak Ci niewiele da bo jak polapia sie to zaczna lamac i beda mogli robic konta.
vokiel
Jest taki projekt Panopticlick, który sprawdza unikalność użytkownika. Warto się przyjrzeć jakie informacje zbiera, może być pomocny w takiej sytuacji
andycole
Van Pytel, gra juz istnieje... i zalezy mi jedynie na malej edycji

vokiel, dzieki, przyjrze sie

a jakby za pomoca apletu java zapisywac plik gdzies na kompie usera? czy antywiry nie beda tego blokowac?
erix
Cytat
a jakby za pomoca apletu java zapisywac plik gdzies na kompie usera?

Kto będzie chciał nabić, zwyczajnie to skasuje albo odpali w sandboksie, który nawet nie zapisze niczego na HDD.
Zyx
Wszyscy, jak równo, zabieracie się do problemu od zupełnie złej strony. Zamiast kombinować, jak koń pod górę, siądźcie z boku i zastanówcie się, co chcecie osiągnąć i co właściwie robicie.

Pomogę trochę. Chcecie wiedzieć, czy dana osoba, np. Jasio z Warszawy, ma konto w naszej grze. Tymczasem we wszystkich metodach identyfikujecie komputer, a nie tego, kto przed nim siedzi. Jak łatwo zauważyć, nie jest to to samo - jedna osoba może korzystać z wielu komputerów, jeden komputer może być używany przez wiele osób. Możecie zablokować skutecznie jakiś komputer, ale w ten sposób nigdy nie zablokujecie jego użytkownika.

Aby jednoznacznie zweryfikować osobę (a nie jej komputer), musicie oczywiście wykorzystać informacje biometryczne, czyli np. linie papilarne, skan źrenicy oka, rozkład włosów na klacie czy co tam jeszcze jest w zanadrzu, i powiązać je z kontem. Wtedy zarówno przy logowaniu, jak i przy rejestracji, badacie czy danego skanu nie ma już w bazie. W pierwszym przypadku posłuży on do zalogowania się na konto (dzięki temu osoba będzie mogła logować się z dowolnego komputera), zaś w drugim, jeśli uzyskamy trafienie, będziemy wiedzieli, że osoba ma już konto i zablokujemy ją. Jedyną potencjalną formą ataku jest przechwycenie strumienia danych biometrycznych, co może nastąpić w trzech miejscach:
- Przez sieć,
- Na komputerze ofiary,
- Podczas transmisji z czytnika elektronicznego do komputera.

Sieć bardzo prosto można zabezpieczyć kryptografią, natomiast z komputera mogą ją wychwycić trojany. Być może, gdyby czytniki na to pozwalały, dałoby się zrzucić kryptografię na elektronikę czytnika - wtedy ewentualny atak musiałby polegać na podmienieniu cudzego komputera, co już w większości przypadków nas będzie satysfakcjonować.

Co, że science-fiction jakieś wypisuję? Dla mnie cały ten temat to czyste fantasy smile.gif. Nie ma 100% skutecznej metody, zwłaszcza jeśli ma ona opierać się na identyfikowaniu komputera, a nie człowieka. Na to drugie jednak się nie zanosi z powodu braku skanerów biometrycznych w większości domowych komputerów, o wsparciu przeglądarek nie wspominając...
set4812
Hmm jak zauwazyłem gry flash zapisuja save z gry na naszym komputerze w temp tongue.gif mozna by było np zrobic jakis baner w flashu z taka funkcja która by cos zapisała na komputerze uzytkownika tongue.gif
erix
Cytat
Hmm jak zauwazyłem gry flash zapisuja save z gry na naszym komputerze w temp

Nie w tempie, tylko w storage'u ciasteczkowym. Ale - FYI - z tego co się orientuję, to wiele pakietów odśmiecających po prostu usuwa te ciastka hurtem. winksmiley.jpg

Bardzo łatwo jest też je skasować, więc...?
set4812
Ale jak sie ustawi usuwanie ciasteczek po zamknieciu przegladarki to nie usuwa , po za tym user o tym nie musi wiedziec on widzi tylko banner a serwer zaznaczy czy z tego komputeraz jest inne konto
Redox
Jest kilka mozliwosci lecz nie ma takiej ktorej by sie nie zlamalo. Przynajmniej mi sie tak zdaje. Mozna uzyc cookie, zabezpieczenie na ip lub email. Cookie mozna delete, ip mozna zmienic tak jak email. Innych mozliwosci nie znam.
nasty
A wysyłanie kodów aktywujących na telefon sms-em a nie na e-mail nie powinno skutecznie wyeliminować dużą część duplikatów?
Mało komu by się chciało latać po nowy starter z każdym nowym kontem.
erix
Cytat
Ale jak sie ustawi usuwanie ciasteczek po zamknieciu przegladarki to nie usuwa

Normalne przeglądarki raczej słuchają użytkowników, więc? winksmiley.jpg
andycole
Zyx, nie zalezy mi na identyfikacji usera, bo to jak napisales jest niemozliwe, ale na identyfikacji komputera.
nasty, to tez nie jest rozwiazanie, bo jeden user moze zalozyc konto na swoja komorke i komorki calej rodziny...
zegarek84
co do kasowania cookies to mało kto kasuje wszystkie [mam na myśli z innych domen dla wygody...] tylko kasuje się z określonej domeny... dlatego cookies z identyfikacją uzyszkodnika możesz zostawić pod adresem innej domeny której nazwa nie będzie przypominała gry [no niestety nie ma sposobu idealnego]...
Autoryzacja - ale bez okienka: WWW-Authenticate - w tym temacie chodziło o komunikację między serwerami - cookies możesz ustawić przy wyświetlaniu jakiegoś obrazka z innej domeny zamieszczonego w grze... niestety podobno IE nie przekazuje cookies dla np. js [nie mam IE i nie mam potrzeby sprawdzania tego...] - może dla obrazków będzie inaczej [js to pewnie niby z bezpieczeństwem może być związane - choć nie wiem czemu skoro na innej domenie strona a na innej plik]...

w ten sposób wyświetlając obrazek miałbyś jakieś cookies pod inną domeną niż gra...

mowa tutaj o zwykłych przeglądarkach gdyż...

oczywiście nie ma rozwiązań idealnych... ktoś bardziej kumaty może sobie nawet bota do zakładania 1k i więcej kont zawsze napisać winksmiley.jpg [maile też nie są problemem]
Van Pytel
Gdyby można bylo uzyskać od przeglądarki / komputer jakiś unikatowy ciąg znaków, wtedy można bardziej zabezpieczyć się, (np: IP + ciasteczko + email + ten ciag ). Zawsze to zwiększa szanse, bo malo kto korzysta z wielu przeglądarek. A nie ma sensu zapisywania jakiego systemu korzysta user.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.