如何在PHP中安全地识别远程设备?

时间:2013-06-24 12:22:46

标签: php sockets embedded security

有没有一种安全的方法,在PHP中识别可能在路由器后面的设备(因此IP不是唯一的)?

背景:我有几个嵌入式设备(自编程和自适应),它们通过状态更新联系web服务器(php + mysql)。然后,如果确认源,则这些更新将保存到数据库中。

  • 据我了解,$_SERVER['REMOTE_ADDR']通常可以信任(除非某些IIS配置可能 - 在特殊情况下 - 错误地返回127.0.0.1;但故事不同)

  • 无论如何,因为我使用SSL,IP地址确实应该不是问题,因为需要握手,如果IP是伪造的或者只是错误,则不应建立连接

  • 目前我要求管理员将IP地址列入白名单,以便加入状态更新

  • 设备还通过$_POST发送MAC地址,以识别具有相同IP地址的不同模块(我知道这很容易被伪造,如果IP地址是可信的,现在就可以信任了)


首先,我不确定IP地址本身是否足以防止来自外部的攻击

其次,如果设备位于路由器后面,它将具有与该网络上的每个PC /设备相同的IP地址。所以任何人都可以使用假的MAC地址(简称为post变量)伪造状态更新,并且因为IP地址被列入白名单,所以它将被信任

那么有没有办法确认设备的身份,或者你知道更好的方法吗?

除了:走另一条路,并让网络服务器轮询不同的设备可能是一个选项,但由于可能有许多(> 2000)设备,我们需要最后的状态(更改)我认为它效率低下。

1 个答案:

答案 0 :(得分:2)

IP地址可能是欺骗性的,MAC地址可能是伪造的,因此这些方法是不够的。一般方法是为每个客户端设备分配一个密钥(可能是所有设备的密钥,即使这可能是一个坏主意)。 “密钥”可以是预定义的字符串(弱,认为用户名/密码)到签名证书(强,认为SSL)。

两者都可以在应用程序级别(通过PHP)或在服务器级别实现。如果您的应用程序在Apache httpd服务器上运行,我建议使用其内置功能,因为它支持both approaches