PHP安全会话

时间:2010-09-07 23:08:27

标签: php session blowfish

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

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

创意1:如果违反服务器安全性则会出现问题。 (键在配置中,会话数据在/ tmp中)
想法2:中间人攻击的问题。 (密钥+凭证已发送)

还有其他建议吗?批评?

2 个答案:

答案 0 :(得分:5)

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

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

当涉及到挫败“中间人”攻击时,那么超级方法就是使用one time pad,预共享离线。这就是安全机构所做的事情 - 所有其他选项使您的应用程序或多或少地依赖于服务器和用户之间的设备的仁慈。所以你需要决定你的容忍程度。

一种合理安全的身份验证方法是zero knowledge proof。它要求您的应用程序只知道用户的公钥。没有密码,没有秘密。关键是当用户想要登录时,您的应用程序应该使用该用户的公钥加密的随机消息进行响应。如果另一方发回正确的随机消息,则表示拥有匹配的私钥。因此,用户被认证。为了防止窃听,在发送回复之前,让用户使用应用程序的公钥加密正确的答案。但是,为所有这些实现必要的功能和适当的GUI将不是一项微不足道的任务。

答案 1 :(得分:2)

对于创意1,您甚至说普通用户可以访问会话文件,这可能是正确的,但您始终可以设置会话保存数据的位置,并且只能由您的域用户/组访问(假设您创建)每个域名的新帐户)。这将确保有人必须在您的代码中使用漏洞来获取对该数据的访问权限。因此,它最终会归结为您对代码编码的安全性(或者您使用的代码)。