![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Istnieje bardzo długa lista 12635 zakazanych adresów IP w takiej postaci:
Kod #komentarz #inny komentarz adres IP adres IP adres IP ... Przy wczytywaniu trzeba pominąć komentarze, a następnie sprawdzić, czy adres IP użytkownika jest w bazie. Boty często atakują serwisy masowo, dlatego nie można zarżnąć serwera. Oto kilka sposobów: 1. Wczytać plik funkcją file() do tablicy, a następnie in_array() 2. Wczytać plik funkcją file_get_contents() jako ciąg znaków, a następnie strpos() 3. Zapisać plik jako tablicę PHP, a później include() i in_aray() 4. Wczytać plik do bazy danych, a potem sprawdzać prostym zapytaniem, czy IP jest w bazie 5. Inny sposób? Zmierzyłem czas i pamięć sposobów 1,2,3,4 na PHP 5.3.1 pod kontrolą Windows XP. Wyniki: 1. Czas: 18.3 ms, pamięć: 1.35 MB, szczytowa: 1.86 MB 2. Czas: 2 ms, pamięć: 0.183 MB, szczytowa: 0.516 MB 3. Czas: 40 ms, pamięć: 1.316 MB, szczytowa: 3.078 MB 4. Czas: 0.7 ms, pamięć: 0.0012 MB, szczytowa: 0.341 MB, baza SQLite 3 Uwagi do poszczególnych sposobów: 1. Chociaż sposób zapewnia 100% skuteczność, jest wolny przy dużej liczbie linii 2. Działa szybko, ale może blokować adresy spoza listy, np. wzorzec 80.0.0.0 pasuje do 180.0.0.0 3. To mnie zaskoczyło, bo kod PHP z tablicą wczytuje się najdłużej i pożera pamięć! 4. Nie wiemy, ile pamięci używa baza. Odczyt z SQLite szybki, podobnie będzie w MySQL.
Ten post edytował WebCM 21.04.2012, 11:58:22 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Zapisuj ip jako:
ip2long nie powinno być problemów przy porównaniu. Baza z założonym indeksem będzie o wiele szybsza. -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Plik jest często aktualizowany, więc wygodniej będzie odczytywać go bezpośrednio
![]() Tylko jak porównać IP jak najszybciej i bez dużego obciążenia serwera i bez konfliktu 8.8.8.8 z 88.8.8.8? W ostateczności wykorzystam bazę danych, tylko trzeba będzie napisać mechanizm aktualizacji czarnej listy w CMS ![]() PS. Czarna lista jest w formacie .txt i pochodzi z systemu Sblam! Ten post edytował WebCM 21.04.2012, 12:29:59 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Plik jest często aktualizowany, więc wygodniej będzie odczytywać go bezpośrednio ![]() To chyba właśnie wygodniej w bazie ![]() Tylko jak porównać IP jak najszybciej i bez dużego obciążenia serwera i bez konfliktu 8.8.8.8 z 88.8.8.8? Przetestuj ip2long W ostateczności wykorzystam bazę danych, tylko trzeba będzie napisać mechanizm aktualizacji czarnej listy w CMS ![]() Jeżeli czarna lista jest w bazie, wystarczy dodać triggera przy dodawaniu rekordu, aby dopisywał do innej tabeli albo od razu ładować do tabeli czarna lista Ten post edytował Fifi209 21.04.2012, 12:28:45 -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Fifi209) Jeżeli czarna lista jest w bazie, wystarczy dodać triggera przy dodawaniu rekordu, aby dopisywał do innej tabeli albo od razu ładować do tabeli czarna lista Czarna lista jest w pliku blacklist.txt. W sposobie 2 problem blokowania adresów spoza listy można rozwiązać jak poniżej, o ile \n jest znakiem nowej linii:
Chociaż baza jest najlepszym wyjściem i może zostanę przy tym. -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 05:25 |