6

我正在创建一个类似于 phpmyadmin(数据库管理 UI)的应用程序。用户需要根据数据库对自己进行身份验证,并且应用程序需要以某种方式存储凭据。SSL 不是所有安装的选项。

  • 想法 1:用户发送凭据,应用程序存储用户名并使用预定义的 Blowfish 密钥 (config.ini.php) 加密密码 - 这就是 phpMyAdmin 所做的。
  • 想法2:登录表单创建随机的blowfish密码(javascript),用户发送登录凭据,应用程序加密用户/密码并将它们存储在会话中的服务器端,密钥存储在cookie中并为每个请求发送。

想法 1:如果服务器安全受到破坏,就会出现问题。(密钥在配置中,会话数据在 /tmp 中)
想法 2:中间人攻击的问题。(发送密钥+凭据)

还有其他建议吗?批评?

4

2 回答 2

5

你所说的问题在绝对意义上是无法解决的。没有服务器是 100% 安全的,每一次“中间人”攻击都可以更进一步。

我建议更具体地定义服务器安全要求。否则,每个解决方案都会显得缺乏,因为从绝对意义上讲,它们总是如此。例如,如果“/tmp”让您担心,请使用 session_save_path() 并将会话数据放在其他位置。

当谈到阻止“中间人”攻击时,超级方法将是使用一次性垫,预先离线共享。这就是安全机构所做的 - 所有其他选项都使您的应用程序或多或少地依赖于服务器和用户代理之间的设备的善意。所以你需要决定你的容忍程度。

一种相当安全的身份验证方法是零知识证明。它只要求您的应用程序知道用户的公钥。没有密码,没有秘密。关键是,当用户想要登录时,您的应用程序应该使用该用户的公钥加密的随机消息进行响应。如果对方发回正确的随机消息,则表明拥有匹配的私钥。因此,用户通过了身份验证。为防止窃听,请让用户代理使用应用程序的公钥对正确答案进行加密,然后再发送回答案。但是,为所有这些实现必要的功能和体面的 GUI 并非易事。

于 2010-09-08T13:47:55.120 回答
2

对于想法 1,您说即使是普通用户也可以访问会话文件,这可能是真的,但是您始终可以设置会话保存数据的位置并仅由您的域用户/组访问(假设您创建了一个新帐户每个域)。这将确保有人必须在您的代码中进行漏洞利用才能访问该数据。因此,它最终会归结为您编写代码(或您使用的代码)的安全性。

于 2010-09-08T01:47:54.807 回答