不幸的是,我认为这不是一个非常安全的方法。原因有很多:
- 本地网络中的 NAT
- ISP 的 NAT(运营商级 NAT)
- 浏览器和 Web 服务器之间的任何位置的代理
- Web 服务器前面的负载均衡器
其中任何一种都可能导致多个设备访问您的页面以共享相同的 IP 地址。
如果您不熟悉:网络地址转换 (NAT)允许网络上的多个系统从同一个公共 IP 地址访问 Internet。这是必要的,因为访问 Internet 的系统远远多于可用的公共 IPv4 地址。
大多数家庭都运行一个为他们执行 NAT 的路由器,这意味着任何连接到 Internet 的系统(例如您的台式机、笔记本电脑、平板电脑、电话、电视)都将来自同一个 IP 地址。这也意味着这些系统中的任何一个都可以访问您的网页,并将通过身份验证。
它变得比那更糟。您的 ISP 可能正在运行运营商级 NAT (CGN) - 这意味着一大群家庭将与您共享 IP 地址。这意味着他们中的任何一个都可以访问您的网页,并将通过身份验证。
然后是代理。如果您的浏览器通过代理(例如由您的 ISP 托管的代理)发送流量,或者您的网站位于内容分发网络 (CDN)前面,那么您很可能会获得代理或 CDN 边缘节点的 IP 地址,而不是您计算机的 IP 地址。
最后,如果您的 Web 主机在您的 Web 服务器前面有一个负载均衡器,那么您最终可能会得到负载均衡器的 IP 地址。
出于所有这些原因,我绝对不会推荐一种仅依赖于访问您网页的用户的 IP 地址的登录机制。
如果您不想自己编写用于身份验证的代码,那么我建议您查看一些第三方库来执行此操作 - 但请确保在将代码实施到您的网页之前查看代码。
关于 IP 欺骗
其他人提到了 IP 欺骗的风险,这在理论上听起来很容易,但(即使是简化的形式)也需要两个不同的步骤:
- 更改 IP 数据报头中的 IP 地址
- 拦截来自服务器的响应以读取结果
第一点本身并不难。难点在于服务器会将响应发送到被欺骗的 IP,而不是攻击者的 IP。为了读取响应,攻击者因此需要拦截对用户的响应。这通常会非常困难。