Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中安全地标识远程设备?_Php_Sockets_Embedded_Security - Fatal编程技术网

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

如何在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是伪造的或完全错误的,就不应该建立连

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

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

  • 据我所知,
    $\u服务器['REMOTE\u ADDR']
    通常是可信的(某些IIS配置除外,在特殊情况下,它可能错误地返回127.0.0.1;但情况不同)

  • 无论如何,由于我使用SSL,IP地址真的不应该是一个问题,因为需要握手,如果IP是伪造的或完全错误的,就不应该建立连接

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

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


因此,首先,我不确定IP地址本身是否足以使其免受来自外部的攻击

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

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


旁白:换一种方式,让Web服务器轮询不同的设备可能是一种选择,但由于可能有许多(>2000)设备需要最后的状态(更改),我认为这是低效的。

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


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

您的问题可能更适合这样做!还感谢您提示使用签名证书!