作为一个更广泛的问题,我想问一下目前保护网站登录的最佳策略是什么。我知道所有的基本知识,比如盐析密码、哈希密码以及使用SSL加密传输,但我觉得这可能并不总是足够的。最好的"防黑客"方法是什么?
你的分数已经是最重要的了,此外你还可以这样做:
- 使用slow密钥派生函数(如BCrypt)对密码进行散列
- 将X-Frame-Options添加到登录页面的HTTP标头中,这样页面就不会显示在iframe中。这有助于防止点击劫持。在PHP中,这看起来像:
header('X-Frame-Options: DENY');
- 将内容安全策略添加到登录页面的HTTP标头中。如果浏览器支持CSP,这可以有效地防止跨站点脚本。在PHP中,它看起来像这样:
header("X-Content-Security-Policy: allow 'self'");
- 在登录页面上重新生成会话id,使会话固定更加困难
- 对整个网站使用HTTPS,这样可以避免很多问题。如果您需要在HTTPS和HTTP之间切换,然后使用单独的cookie进行身份验证,请查看此示例
- 如果您的网站仅为HTTPS,则可以添加HTTP Strict Transport Security标头。HSTS可以防止用户(已经访问过您的网站一次)调用不安全的HTTP页面。这有助于防止SSL剥离
根本不存储密码,而是使用SRP
http://en.wikipedia.org/wiki/Secure_Remote_Password_protocol