如何实现一个良好的登录/输出到webapp的系统

时间:2010-04-23 21:52:42

标签: security login web-applications login-control

我是PassPad的开发人员之一,这是一个安全的密码生成器和用户名存储系统。我们仍在努力,但我对实施安全登录/退出系统的最佳方法提出了一些问题。

现在,我们计划做的是让登录系统使用用户名和会话密钥保存cookie,这就是用作身份验证的所有内容。服务器验证两者是否匹配。登录/退出后,将创建一个新密钥。

这是一个与安全相关的webapp,虽然我们实际上并没有存储任何可能让用户感到烦恼的信息,但由于它是面向安全的,因此它至少需要出现以用户满意的方式保护。

有没有更好的方法在PHP中实现登录/退出系统?优选地,它不会花费太多的编码时间或服务器资源。还有什么我需要实施的,比如蛮力保护等吗?我该怎么做呢?

1 个答案:

答案 0 :(得分:4)

确保您已阅读OWASP top 10 for 2010,特别是A3:Broken Authentication and session management。这很重要,因为您已经违反了对https的要求。另外,请务必阅读有关CSRF的信息,强制用户登录或注销您的服务是一个漏洞。关闭.htaccess中的目录列表:http://passpad.org/actions/

我还建议您运行Web应用程序防火墙,尤其是在您是安全Web应用程序的情况下。 mod_security是免费的,可以阻止很多攻击。还要确保使用wapiti(开源)或acunetix($$$)测试应用程序的漏洞,但请确保在禁用WAF的情况下测试应用程序。

在蛮力保护方面,我非常喜欢gmail的方法。在获得足够的“热量”之前,不要用验证码提示它们。通过对您的系统执行不良操作可以累积热量。热量被分配给IP地址,而不是会话。例如,如果他们注册了2个用户帐户,您可能希望使用第3个提示符提示他们。如果您有3次登录尝试失败,则应提示他们。如果他们解决验证码,您可以选择通过降低热值或将其设置为零来“冷却”它们。使用reCpathca到目前为止最好。