Как идентифицировать пользователя в PHP? - PullRequest
0 голосов
/ 25 августа 2011

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

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

но:

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

if (isset ($ _ SESSION ["user"])) { $ user = $ _SESSION ["user"]; } еще { $ user = "unknown"; }

  1. Я читал, что в Perl есть некоторый API, который называется NET :: MAC,

    http://metacpan.org/pod/Net::MAC

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

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

Ответы [ 3 ]

6 голосов
/ 25 августа 2011

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

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

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

0 голосов
/ 25 августа 2011

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

0 голосов
/ 25 августа 2011

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

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

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

...