Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [fragment] Blokowanie narodowości.
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Regz
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 smile.gif
Pyton_000
Słabe, bardzo słabe...

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.

Regz
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ę. smile.gif
Pyton_000
Dobra fakt, mój błąd. Mam dość młota udarowego sąsiadów... chyba czas odpocząć...
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-2024 Invision Power Services, Inc.