![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 16.10.2015 Ostrzeżenie: (10%) ![]() ![]() |
Witam, wiele osób zmagało się z trudnym tematem tego jak zablokować daną narodowość / kraj
na swojej stronie internetowej. Stało się już nawet modne zasięganie do wielkich baz danych typu ip2country. Jest to niestety bardzo dużo roboty dla programisty a znalezienie rozwiązania prostego i rewelacyjnego przyszło mi na myśl właśnie dzisiaj kiedy musiałem zablokować pewnego bota spamującego z różnych IP z Ukrainy który wchodził na forum znajomego opartego na IP Board. Tytułem wstępu: Usługi które służą wspólnemu dobru należy szanować a taką usługą jest whois aby nie zaśmiecać serwerów whois za dużą ilością zapytań nie należy wykonywać skryptu więcej niż raz dla jednego adresu ip więc polecam przechowywać cache wyników. W skrypcie zrobiłem jednak rozwiązanie oparte na sesjach, aby zapytania nie wykonywały się częściej niż jeden raz dla poprawnej sesji. Wykorzystane funkcje: + Sprawdzenie istnienia zmiennej sesyjnej http://php.net/manual/en/function.isset.php + Obsługa połączenia z serwerem Whois http://php.net/manual/en/function.fsockopen.php http://php.net/manual/en/function.fwrite.php http://php.net/manual/en/function.fgets.php http://php.net/manual/en/function.feof.php http://php.net/manual/en/function.fclose.php + Sprawdzenie czy istnieje blokowany string http://php.net/manual/en/function.strpos.php Dobrze dobrze ale gdzie skrypt? http://phpdevil.blogspot.com/2015/10/php-p...arodowosci.html Zapraszam do komentowania i proponowania poprawek ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Twoim rozwiązaniem przy mojej skromnej bazie ok 350 tyś unikalnych IP wyszukiwanie jest mordercze... Nie dość że wczytujesz plik wiersz po wierszu w pętli to jeszcze potem strpos? Masakra. Równie dobrze możesz sobie wylosować true/false i zablokować usera. Pomysł z zapisaniem w sesii dla IP jak najbardziej ok. Ten post edytował Pyton_000 16.10.2015, 10:41:35 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 16.10.2015 Ostrzeżenie: (10%) ![]() ![]() |
Nie wczytuję pliku, tylko otwieram połączenie z serwerem który zwraca informację whois.
Nie mam zamiaru wczytywać 350 tyś unikalnych IP na raz bo to w ogóle nie ma sensu. Co do funkcji strpos równie dobrze może być to wyrażenie regularne. Masz wolną rękę. To rozwiązanie sprawdza się aktualnie przy 6k użytkownikach na forum znajomego bez problemu, jest natomiast rozszerzone o inne mirrory whois aby nie katować serwerów i o cacheowanie wyników więc jeśli zapamięta że dany adres jest danej narodowości to zapisuje w bazie danych i sprawdza gdy upłynie czas w pliku konfiguracyjnym czego niestety przy bazach ip2country nie da się wykonać bo adresy bywają przyznawane różnie. Dziękuję za opinię. ![]() Ten post edytował Regz 16.10.2015, 10:16:40 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dobra fakt, mój błąd. Mam dość młota udarowego sąsiadów... chyba czas odpocząć...
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.05.2025 - 20:09 |