【问题标题】:How to uniquely identify a client in a web (PHP) application如何在 Web (PHP) 应用程序中唯一标识客户端
【发布时间】:2017-03-13 03:19:54
【问题描述】:

我们一直在开发一个将用于数据输入的 Web 应用程序(PHP,使用 Yii PHP 框架)。客户端将是来自 LAN 和 WAN 的用户(许多远程客户端将在代理之后,使用一个带有 NAT 的 IP 地址访问我们的网络)。我们基本上想要的是以没有恶意用户更改数据的方式保证数据的有效性。

有没有办法以一种独特的方式以编程方式识别每个客户端,这样我就可以保证(至少在一定比例上)没有恶意的远程用户会连接?我们正在考虑收集所有远程用户的 MAC 地址,并使用(非 Web)客户端生成哈希字符串,用户将在 Web 应用程序中输入该字符串,然后在此身份验证方案通过时继续。正如我所说,为远程客户端使用其他非 Web 应用程序是一种选择。

我上面描述的这种解决方案可行吗?我们是否应该看到其他解决方案,比如 VPN?

【问题讨论】:

  • 如果你把问题放宽一点,让标题就是问题,那么答案就是做不到。当前没有识别客户端连接的机制。在 PHP 中,"$_SERVER['REMOTE_ADDR']" 曾经可以工作,但是当 VPN 代理许多客户端时,它现在会失败。如果我们要支持有状态的连接,例如填写表格,我们需要一个新的标准。

标签: php security web


【解决方案1】:

VPN 是一种典型的解决方案,可以解决除您明确授予访问权限之外的所有人的锁定问题 --- 基本上,您拒绝所有未在本地网络或 vpn 中验证的站点连接。这样您就不必为实际的 Web 应用程序编写任何时髦的逻辑。

我认为这是一个理想的解决方案,因为它允许应用程序在未来其他开发人员介入时可维护......此外,它需要更少的开发人员并最终降低成本。

【讨论】:

  • 感谢您的回复。我想我们需要看看像 OpenVPN 这样的解决方案。这样的设置对最终用户来说有多困难?
  • 好问题!解决方案可能在serverfault.com 等着你
【解决方案2】:

普通用户身份验证通常是可以的,但如果您有更高的安全需求,您可以提供客户端 X.509 证书以安装在他们的浏览器中。 VPN 当然是一种选择,但您只需将身份验证问题从网站转移到网络 vpn。

【讨论】:

【解决方案3】:

您正在寻找的是 SSH 密钥对: https://help.ubuntu.com/community/SSH/OpenSSH/Keys

这方面有更多的资源,简要的理论: 每个客户端创建一对唯一的密钥,一个私有的和一个公共的。公众进入你的服务器,私人留在他身边。然后客户端使用密钥进行身份验证。服务器从中计算出一个有效的公钥,并检查您的系统中是否有这样的密钥。如果找到一对 - 身份验证成功。 (到目前为止,我从未将它用于 Web 身份验证)

此外,您还可以使用 OTP(一次性密码)技术。由于它通常基于每个帐户绑定,因此非常安全: https://github.com/lelag/otphp

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2017-02-09
    相关资源
    最近更新 更多