|
|
|
| вот код, подключается к каждой странице...
<?php
if(isset($_SESSION['name']))
{
$q=mysql_query("SELECT * FROM bann WHERE name='$_SESSION[name]' AND ua='$HTTP_USER_AGENT' AND ip='$REMOTE_ADDR';");
if (mysql_num_rows($q)!==0)
{
echo $v."Доступ Вам запрещен!!! По всем вопросам обращайтесь в службу поддержки
<a href=\"feedback.php?mail=write\">support@wap-kuban.net.ru</a>".$v1;
include "exit.php";
}
}
?>
|
таблица содержит 3 столбца - name, ua, ip
добавляю свои даннуе, а результата нет | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(28.06.2007 в 23:31)
| | извините!!! подфорум перепутал... | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(28.06.2007 в 23:33)
| | получается ваши посетители не смогут поменять браузер или даже просто поставить новую версию? | |
|
|
|
|
|
|
|
для: bronenos
(28.06.2007 в 23:54)
| | почему? я делаю сравнение текущего браузера с браузером записанным в таблице... логически получается что пользователь при смене одного из параметров сможет зайти опять... | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(29.06.2007 в 00:08)
| | перед смогут я случайно НЕ поставил
при смене клиента бан уже не будет действовать | |
|
|
|
|
|
|
|
для: bronenos
(29.06.2007 в 00:32)
| | что вы посоветуете? и почему в таком виде кода бан не работает? | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(29.06.2007 в 00:39)
| | Потому что $REMOTE_ADDR не существует. Вероятно. | |
|
|
|
|
|
|
|
для: Shorr Kan
(29.06.2007 в 02:15)
| | в зависимости от register_globals она может существовать. в запросе проверяется агент пользователя. следовательно, если я сменю агент или хотя бы обновлю версию - он пропадет | |
|
|
|
|
|
|
|
для: Shorr Kan
(29.06.2007 в 02:15)
| | ну,если это Remote,вытащенная из server,то она всегда должна существовать...вопрос в том,что блокировка по remote_addr-очччень ненадежная весчь,он может меняться при КАЖДОМ заходе человека на страницу...А user_agent сейчас не меняют себе по моему толъко самые ленивые | |
|
|
|
|
|
|
|
для: Ralph
(29.06.2007 в 08:27)
| | Подскажите, как тогда лучше написать код? | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(29.06.2007 в 09:02)
| | без агента | |
|
|
|
|
|
|
|
для: bronenos
(29.06.2007 в 09:50)
| | Лично я использую комбинацию HTTP_X_FORWARDED_FOR/HTTP_X_REAL_IP(причем не весь,а первые 3 числа из 4)+HTTP_ACCEPT | |
|
|
|
|
|
|
|
для: Ralph
(29.06.2007 в 10:46)
| | Ralph, не совсем понял... Можно примерчик? | |
|
|
|
|
|
|
|
для: Angel_Hranitel
(29.06.2007 в 15:54)
| | Ну,к примеру,получаем айпи юзверя if(isset($HTTP_X_FORWARDED_FOR)){$ip=$HTTP_X_FORWARDED_FOR} elseif(isset($HTTP_X_REAL_IP)){$ip=$HTTP_X_REAL_IP} else{$ip=$REMOTE_ADDR;} заносим в таблицу бани UPDATE ban SET name=$name,ua=$HTTP_ACCEPT,ip= FLOOR(INET_ATON($ip)/256) позже проверяем SELECT * FROM ban WHERE name=$name OR (ip=FLOOR(INET_ATON($ip)/256) AND ua=$HTTP_ACCEPT) | |
|
|
|
|
|
|
|
для: Ralph
(29.06.2007 в 18:14)
| | Не обязательно делить на 256,изменив делитель,вы соответственно сузите или расширите диапазон блокируемых адресов.А ваша проверка порочна изначально,потому-что базируется только на логике И (AND).К примеру,некий Ralph нас...л в вашей гостевой,вы его забанили...Но если тот же Ralph зайдет с другого агента или просто изменится его ip (а при использовании Мини-Оперы REMOTE_ADDR меняется чуть ли не при каждом заходе,то ваш скрипт скажет мне "добро пожаловать" | |
|
|
|
|
|
|
|
для: Ralph
(29.06.2007 в 18:26)
| | А в моем примере банится пользователь с ником Ralph ИЛИ кто то с другим ником,но(имеющий похожий на мой ip И такой-же,как у меня HTTP_ACCEPT) | |
|
|
|
|
|
|
|
для: Ralph
(29.06.2007 в 18:33)
| | угу.... только вот проблема...
1) при добавление записи
$q="INSERT INTO bann SET
name='".$rezult['name']."',
ua='".$rezult['ua']."',
ip=FLOOR(INET_ATON(".$ip.")/256)";
|
ошибка
Ошибка при добавлении записи - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.0.1)/256)' at line 4
|
2) при определении забанен ли человек
разбил на 2 запроса
$q=mysql_query("SELECT * FROM bann WHERE name='$_SESSION[name]'");
$q=mysql_num_rows($q);
if ($q!==0)
{
echo "Внимание! Ваш ник добавили в бант лист!!!<br/>";
}
$ip=$REMOTE_ADDR;
$q=mysql_query("SELECT * FROM bann WHERE ip=FLOOR(INET_ATON(".$ip.")/256) AND ua=$HTTP_ACCEPT");
$q=mysql_num_rows($q);
if ($q!==0)
{
echo "Внимание! Ваш IP и UserAgent совпадает данными, добавлеными в бант лист!!!<br/>";
}
|
хоя таблица с баном пустая, но получаю
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in T:\home\virtual\site.ru\conf.php on line 148
Внимание! Ваш IP и UserAgent совпадает данными, добавлеными в бант лист!!!
|
| |
|
|
|
|
|
|
|
для: Angel_Hranitel
(29.06.2007 в 20:07)
| | 1. IP-адрес - строка. Поэтому нужно её обрамлять кавычками: INET_ATON('127.0.0.1').
2. Так как в запросе ошибка, то mysql_num_rows() возвращает boolean(false).
boolean(false) не подобно int(0). Поэтому условие "$q !== 0" является истинным и выводится надпись.
Совсем непонятно для чего Вы делите десятичное представление адреса на 256. | |
|
|
|
|
|
|
|
для: Unkind
(29.06.2007 в 20:21)
| | >Совсем непонятно для чего Вы делите десятичное представление адреса на 256.
Наверное пытается получить адрес подсети, убрав номер машины из IP.
Правда справедливо это будет лишь для сетей класса C (/24, 255.255.255.0) | |
|
|
|
|
|
|
|
для: Trianon
(30.06.2007 в 11:46)
| | Извините,не совсем понял ваш ответ,особенно в скобках после слов "...класса С" ? И почему только "...пытается..." ? :-)
To Angel:Вчера меня сильно температурило,только сегодня заметил-какой нафиг update,конечно же insert.Кавычки не ставил,т.к. Пишу с телефона,а там с кавычками,особенно с обратными,сложно...И все же не очень полагайтесь на remote_addr :-) | |
|
|
|
|
|
|
|
для: Ralph
(30.06.2007 в 13:16)
| | Спасибо! Это я понял и сразу написал как положено... Вот не могу понять, что будет если делить не на 256, а на 128? | |
|
|
|
|
|
|
|
для: Ralph
(30.06.2007 в 13:16)
| | Именно потому, что сети есть разных классов ( имеющие разное количество адресов хостов в подсети).
Основные классы:
A - с маской подсети 255.0.0.0 (или /8 в нотации cisco) и 16 миллионами адресов хостов.
B -с маской подсети 255.255.0.0 (или /16) и 65 тысячами адресов хостов.
C - с маской подсети 255.255.255.0 (или /24) и 254 адресами хостов. (или /24)
Но бывают и промежуточные: с n бит под адрес подсети и 32-n бит под адрес хоста.
Провайдеры очень любят раздавать адресное пространство интернета, например, подсетками вида 255.255.255.248 (или /29) с шестью хостами в сети.
Для почтовика, файрволла, демонов http, https и DNS, менеджемент-сервера SSH - в самый раз. Если слегка потеснить - даже на гейтвей останется. :) | |
|
|
|