【问题标题】:PHP: get client IP or MAC address to 'prove' client is from own Intranet?PHP:获取客户端 IP 或 MAC 地址以“证明”客户端来自自己的 Intranet?
【发布时间】:2017-06-11 22:03:50
【问题描述】:

注意:这是一个逻辑/安全问题,而不是 PHP 的真正“操作方法”。

首先是背景...

我想限制对公司 INTRAnet 网站的访问,仅限使用公司计算机(Windows 或 Linux)并且“在办公室”或通过 VPN 远程连接到我们公司网络的人员。

目前,用户使用他们的公司用户名和密码登录,这些用户名和密码通过 LDAP 进行身份验证,用于每个会话。我想让他们的生活更轻松一些,并允许他们在登录时使用“记住我”选项,然后将一些信息存储在 cookie 中。

我想放入 cookie 中的信息是他们的用户名和客户端 IP 地址或客户端 MAC 地址,并设置例如 30 天的有效期。在随后的登录中,此 cookie 的存在表明正在使用有效的用户和有效的客户端,因此无需再次登录(直通)。

现在问题...

如果客户端被授权并连接到我们的公司网络,那么来自 PHP 的系统调用是否只会返回 IP 或 MAC 地址?如果这是真的,那么通过反向逻辑,从这些地址中的一个或两个获得空返回值意味着客户端计算机无权连接到我们的公司网络 - 是否正确?有没有更好的方法(更安全的方法,无需用户强制登录每个会话)来解决这个问题?

提前致谢。

【问题讨论】:

  • 只为会话 cookie 提供用户名和 MAC 是个坏主意,改为生成唯一的哈希

标签: php security cookies


【解决方案1】:

MAC 只能在同一个子网上使用;如果您的 Intranet 更广泛一点,它可能会在内部进行路由,尤其是在涉及 VPN 的情况下。所以没有可靠的方法来获取客户端的 MAC 地址,不。

随着客户端的上线和下线,IP很有可能会发生变化,所以IP也是没用的。

真的,如果您担心应用程序只能通过 Intranet 访问,那么确保这一点的最佳方法是将 Intranet/服务器配置为只能通过 Intranet 物理访问。如果网络不会将外部请求路由到服务器,那么外部的任何人都无法访问服务器/应用程序。在应用程序代码中担心这一点是错误的。

【讨论】:

  • 这是对 OP 问题的正确答案。尤其是最后一句话。
【解决方案2】:

使用 php exec("getmac /fo csv"); 可以轻松获取客户端的mac地址在 Windows 上,然后使用此字符串对用户进行身份验证。 谢谢

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 2021-03-18
    • 2011-10-22
    • 2019-01-14
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2018-07-27
    相关资源
    最近更新 更多