如何在PHP中安全地标识远程设备?
在PHP中,是否有一种安全的方法来识别路由器后面的设备(因此IP不是唯一的) 背景:我有几个嵌入式设备(自编程和自适应),它们通过状态更新与Web服务器(php+mysql)联系。然后,如果来源已确认,这些更新将保存到数据库中如何在PHP中安全地标识远程设备?,php,sockets,embedded,security,Php,Sockets,Embedded,Security,在PHP中,是否有一种安全的方法来识别路由器后面的设备(因此IP不是唯一的) 背景:我有几个嵌入式设备(自编程和自适应),它们通过状态更新与Web服务器(php+mysql)联系。然后,如果来源已确认,这些更新将保存到数据库中 据我所知,$\u服务器['REMOTE\u ADDR']通常是可信的(某些IIS配置除外,在特殊情况下,它可能错误地返回127.0.0.1;但情况不同) 无论如何,由于我使用SSL,IP地址真的不应该是一个问题,因为需要握手,如果IP是伪造的或完全错误的,就不应该建立连
- 据我所知,
通常是可信的(某些IIS配置除外,在特殊情况下,它可能错误地返回127.0.0.1;但情况不同)$\u服务器['REMOTE\u ADDR']
- 无论如何,由于我使用SSL,IP地址真的不应该是一个问题,因为需要握手,如果IP是伪造的或完全错误的,就不应该建立连接
- 目前,我要求管理员将IP地址列入白名单,以便接受状态更新
- 该设备还通过
发送MAC地址,以识别具有相同IP地址的不同模块(我知道这很容易被伪造,如果IP地址是可信的,现在将被信任)$\u POST
因此,首先,我不确定IP地址本身是否足以使其免受来自外部的攻击 其次,如果设备位于路由器后面,它将与网络上的每台PC/设备具有相同的IP地址。因此,任何人都可以伪造一个带有假MAC地址的状态更新(简单地说是post变量),并且由于IP地址被列入了白名单,所以它是可信的 那么有没有办法确认设备的身份,或者你知道更好的方法吗?
旁白:换一种方式,让Web服务器轮询不同的设备可能是一种选择,但由于可能有许多(>2000)设备需要最后的状态(更改),我认为这是低效的。IP地址可能被欺骗,MAC地址可能被伪造,因此这些方法是不够的。一般的方法是为每个客户端设备分配一个密钥(可能对所有设备分配相同的密钥,即使这可能是个坏主意)。“密钥”可以是从预定义字符串(弱,认为用户名/密码)到签名证书(强,认为SSL)的任何内容
两者都可以在应用程序级别(通过PHP)或服务器级别实现。如果您的应用程序运行在Apache
httpd
服务器上,我建议您使用其支持的内置功能。您的问题可能更适合这样做!还感谢您提示使用签名证书!