Доброе время суток, Знатоки. На сайта записываю от куда пришел посетитель, его ip, браузер и время. Также при этом стартует сессия. Если сессия активна данные не записываются. И тут заметик что не первый раз записывается 40-50 переходов в 1-2 минуты с одного сайта, одного ip и браузера. Получается проверку существования сессии как-то обходят. Подскажите как можно обезопасить себя от этого?
Ннничерта не понятно. Ты хочешь, чтобы человек мог переходить только с одного айпи, сайта и браузера, но тебе не нравится, когда человек переходит с одного айпи сайта и браузера? Что значит "обойти сессию"? Сессия - не механизм защиты. Она просто хранит между вызовами PHP данные, которые ты в нее положил. HTTP-это stateless протокол. PHP по дефолту тоже stateless - машина. Но это не круто, по этому завезли механизм для хранения состояния сеанса. Можно вообще хоть свой написать, не принципиально. Но из коробки тоже работает отлично. От чего ты хочешь обезопаситься? От появления посетителей?
Наверно не правильно выразился. Это для личной статистики, чтоб я видел с какого саита был переход. Сессия нужна чтоб не было записы если посетитель переходит повторно. --- Добавлено --- PHP: if(isset($_SERVER['HTTP_REFERER']) && ($_SESSION['referer'] < 1)){ $referer = html($_SERVER['HTTP_REFERER']); $addr = html($_SERVER['REMOTE_ADDR']); $agent = html($_SERVER['HTTP_USER_AGENT']); if (strpos($agent, "Firefox") !== false) $browser = "Firefox"; elseif (strpos($agent, "Opera") !== false) $browser = "Opera"; elseif (strpos($agent, "Chrome") !== false) $browser = "Chrome"; elseif (strpos($agent, "MSIE") !== false) $browser = "Internet Explorer"; elseif (strpos($agent, "Safari") !== false) $browser = "Safari"; else $browser = "Неизвестный"; if(stristr($agent, "Android")) { $agents = $browser.' (Android)'; }else{ $agents = $browser; } $s=mysql_query("INSERT INTO `stat` SET `referer`='".sql($referer)."', `addr`='".sql($addr)."', `agent`='".sql($agents)."', `date`='".num(time())."'"); if($s == 'true'){ $_SESSION['referer'] = 1; } }
1) Ваш код уязвим для инъекций. 2) mysql_ расширение устарело и уже не поддерживается в новых версиях пхп, используйте mysqli_; 2) А вы, перед тем как вот сессию писать/читать, открывали ее? В противном случае вы просто создаете массив, который умирает вместе со скриптом.
Значит, не работает, если выставленная ранее метка не срабатывает. Либо это просто совпадение и пользователи разные, но с одинаковым браузером(дай угадаю, хром), с одного ip (дай угадаю, провайдерская подсеть), и с одного сайта - любого, откуда массово народ по ссылке пройти может. Либо это бот/пользователь, у которого банально отключены куки. Тогда сессия работать не будет. Не надо пилить самостоятельно аналитику. Воспользуйся гугловой. Она в тысячу раз круче и мощнее.