Как идентифицировать пользователя в PHP?

У меня такая большая проблема, и я думал об этом в течение 2 дней. Я написал небольшой урок о том, как отлавливать незарегистрированных (гостевых) пользователей, которые могут попробовать SQL-инъекцию через URL-адрес, и после двух экспериментов их IP-адрес блокируется в моей БД (поэтому в массиве я храню некоторые признаки),

$blockSigns = array ("'", "/", "\", ":", "//", "and so on");

но:

  1. IP не является хорошим решением (PHP не может видеть IP-адреса локальной сети, если сервер находится под прокси-сервером), и даже я не могу его заблокировать. Не могу заблокировать 192.168.1.10 :)
  2. Мне не нужен WAN IP, потому что я не могу заблокировать сайт для компании из-за одного n00b.
  3. PHP не может поймать Mac-адрес (mac не включен в заголовок)
  4. Я также хочу заблокировать пользователей, которые являются гостями, поэтому я не знаю их имен пользователей, почты или чего-то еще.

if (isset($_SESSION["пользователь"])) { $user = $_SESSION["пользователь"]; } еще { $user = "неизвестно"; }

  1. Я читал, что у perl есть некий API, называемый NET::MAC,

    http://metacpan.org/pod/Net%3a%3aMAC

Решил найти мак адрес пользователя через perl и интегрировать его в PHP. Является ли это возможным? если есть то как? Не могу понять. если не:

как я могу решить эту проблему? как я могу идентифицировать пользователя, если он/она не зарегистрирован? есть ли шанс? поделитесь опытом, если у вас уже была такая проблема. заранее спасибо...


person DVX    schedule 25.08.2011    source источник
comment
Зачем беспокоиться? Если ваш код написан правильно, пусть они попытаются внедрить все, что хотят.   -  person Jon    schedule 25.08.2011
comment
вы не можете прочитать mac-адрес на сервере. Он не входит ни в какие пакеты. (не mac от пользователя, запрашивающего страницу)   -  person Fender    schedule 25.08.2011
comment
Если бы вы могли четко идентифицировать пользователя, это было бы немедленно использовано не по назначению. Я рад, что это пока невозможно.   -  person martinstoeckli    schedule 25.08.2011


Ответы (3)


невозможно получить MAC-адрес пользователя. Единственный MAC-адрес, который видит ваш сервер, — это адрес маршрутизатора, к которому он подключен. И если вы заблокируете это, вы заблокируете весь трафик, поступающий на ваш сервер.

Итак, как сказал @Jon, если ваше приложение безопасно, вам не нужно заботиться о людях, пытающихся внедрить что-то.

Между прочим, ваш способ обнаружения SQL-инъекций ужасен. Особенно ' и :, а также другие символы совершенно допустимы в большинстве контекстов. Например, настоящее имя пользователя может включать '. Однако вам вообще не нужно добавлять такой код обнаружения - если вы правильно избегаете всех ненадежных входных данных или используете подготовленные операторы для своих запросов (лучше), ваше приложение вообще не уязвимо для внедрения SQL.

person ThiefMaster    schedule 25.08.2011
comment
но я защищаю его через URL, например index.php?action=page&p_id='12 - person DVX; 25.08.2011
comment
Просто преобразуйте его в целое число. - person ThiefMaster; 25.08.2011

вы можете попробовать использовать ip вместе со строкой пользовательского агента и некоторой дополнительной информацией, такой как плагины. Но если кто-то попробует это с браузером своей компании, ip и пользовательский агент должны быть одинаковыми.

поэтому единственное решение:

Сделайте свою страницу безопасной, чтобы исключить SQL-инъекцию

person Fender    schedule 25.08.2011

Вероятно, окончательного решения нет. Если вы знаете IP-адреса зарегистрированных пользователей, вы можете разрешить только им доступ к вашим страницам (.htacces на сервере Apache). Вы также можете попробовать установить файл cookie после регистрации пользователя, и тогда вы сможете проверить, присутствует ли этот указанный файл cookie (это возможно только тогда, когда пользователь использует только один браузер на одном компьютере, поэтому вы также можете установить его при каждом входе). Сеансы всегда заканчиваются, когда пользователь закрывает браузер.

person Damian    schedule 25.08.2011