1

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

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

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

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

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

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

 


所以首先我不确定IP地址本身是否足以使其免受外部攻击

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

那么有什么方法可以确认设备的身份,或者您知道更好的方法吗?

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

4

1 回答 1

2

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

两者都可以在应用程序级别(通过 PHP)或服务器级别实现。如果您的应用程序在 Apachehttpd服务器上运行,我宁愿推荐使用它的内置功能,因为它支持这两种 方法

于 2013-06-24T13:54:33.730 回答