2013-06-24 2 views
1

Есть ли безопасный способ идентификации устройства, которое может быть за маршрутизатором (поэтому IP-адрес не уникален) в PHP?Как безопасно идентифицировать удаленное устройство на PHP?

Справочная информация: У меня есть несколько встроенных устройств (самозаменяемые &), которые можно связать с веб-сервером (php + mysql) со статусом обновлений. Эти обновления затем - если источник подтвержден - сохранены в базе данных.

  • Как я понимаю $_SERVER['REMOTE_ADDR'] обычно можно доверять (за исключением некоторых конфигурации IIS, где он может - при особых обстоятельствах - неправомерно возвращение 127.0.0.1, но другая история)

  • Во всяком случае, так как я использую SSL, IP-адрес действительно не должен быть проблемой, потому что требуется рукопожатие, и если IP-подделка или просто неверна, соединение не должно устанавливаться.

  • Теперь для меня требуется, чтобы IP-адреса были добавлены в белый список от администратора, для обновление статуса, которое должно быть рассмотрено

  • Устройство дополнительно отправляет МАС-адрес, чтобы идентифицировать различные модули с одинаковым IP адресом (я знаю, что это может быть очень легко подделать, и теперь будет доверять, если IP-адрес доверенного)

через $_POST

 


Итак, прежде всего я не уверен, если IP-адрес сам по себе достаточно для того, чтобы быть в безопасности от атак извне

Во-вторых, если устройство находится за маршрутизатором, он будет иметь тот же IP-адрес, что и каждый ПК/устройство в этой сети. Поэтому о ком-то, кто может создать обновление статуса с помощью фальшивого MAC-адреса (просто как переменную сообщения), а так как IP-адрес является белым, ему будет доверено

Итак, есть ли способ подтвердить личность устройства, или вы знаете лучший способ сделать это?

Помимо этого: Идет другим способом, и у вас есть опрос веб-сервера, что различные устройства могут быть вариантом, но поскольку может быть много (> 2000) устройств, для которых нам нужен самый последний статус (изменение), я думал это неэффективно.

+0

Ваш вопрос, вероятно, будет лучше подходит для http://security.stackexchange.com/ – RandomSeed

+0

Сделай это! Благодарим вас за подсказку использовать подписанный сертификат! – Levit

ответ

2

IP-адреса могут быть подделаны, MAC-адреса могут быть подделаны, поэтому методов тезисов недостаточно. Общий подход - назначить ключ каждому клиентскому устройству (возможно, тот же ключ для всех устройств, даже если это, вероятно, плохая идея). «Ключ» может быть любым из предопределенной строки (слабый, думать имя пользователя/пароль) в подписанный сертификат (сильный, думаю, SSL).

Оба варианта могут быть реализованы либо на уровне приложений (по PHP), либо на уровне сервера. Если ваше приложение работает на сервере Apache httpd, я бы предпочел использовать его встроенные функции, поскольку он поддерживает bothapproaches.