我们一直在开发一个将用于数据输入的Web应用程序(PHP,使用Yii PHP框架)。客户端将是来自LAN和WAN的用户(许多远程客户端将位于代理之后,使用一个带NAT的IP地址到达我们的网络)。我们基本上想要的是以没有恶意用户改变数据的方式保证数据的有效性。
有没有办法以独特的方式以编程方式识别每个客户端,以便我可以保证(至少在一些好的百分比)没有恶意远程用户将连接?我们正在考虑收集所有远程用户的MAC地址,并使用(非Web)客户端生成用户将在Web应用程序中输入的哈希字符串,然后在此身份验证方案通过时继续。正如我所说,使用其他非Web应用程序作为远程客户端是一种选择。
上面描述的解决方案是否可行?我们应该看到其他解决方案,比如VPN吗?
答案 0 :(得分:3)
普通用户身份验证通常没问题,但如果您有更高的安全性需求,则可以在其浏览器中提供客户端X.509证书。 VPN当然是一种选择,但您只需将身份验证问题从网站移动到网络vpn。
答案 1 :(得分:3)
VPN是锁定除了您明确授予访问权限之外的所有人的问题的典型解决方案 - 基本上您拒绝所有未在本地网络或vpn中进行身份验证的站点连接。这样您就不必为实际的Web应用程序编写任何时髦的逻辑。
我认为这是一个理想的解决方案,因为它允许应用程序在将来可供其他开发人员介入时进行维护...此外,它将需要更少的开发人员并最终降低成本。
答案 2 :(得分:0)
您正在寻找的是SSH-Key对: https://help.ubuntu.com/community/SSH/OpenSSH/Keys
这方面有更多的资源,理论简要说明: 每个客户端创建一对唯一密钥,私有密钥和公共密钥。公众进入你的服务器,私人与他同住。然后客户端使用密钥进行身份验证。服务器从中计算有效的公钥,并检查系统中是否有这样的密钥。如果找到一对 - 身份验证成功。 (到目前为止,我从未使用过网络验证)
此外,您可以使用OTP(一次性密码)技术。由于它通常基于每个帐户绑定,因此非常安全: https://github.com/lelag/otphp