所以我想设计一个高安全性的php用户系统。我决定从登录/会话结束开始。我希望有人查看我的计划并告知我漏洞和安全漏洞。
这是我第一次尝试在这样的级别上创建系统,如果您发现问题,可以向我发送资源以帮助我修复它。
连接到数据库 *我将使用 MYSQL,因此它是您的标准数据库连接,存储在站点根目录之外的文件中。
注册 *注册将是一个简单的表单,我使用存储在外部文件中的函数来清理输入并防止 SQL 注入
// A function to sanitize input for data being input into a database
function sanitizeinput($rawinput) {
$sanitizedinput = mysql_real_escape_string($rawinput);
return $sanitizedinput;
}
我需要这个功能来保护它吗?
密码是使用 SHA-512 或 BCrypyt 进行散列,我做了一些研究,看到很多人说 MD5 不再足够安全,我想确保最好的安全性,所以我应该使用什么来散列密码。
我还使用以下代码段添加了一个随机生成的盐,它附加到散列密码的前面,然后重新散列。然后盐以纯文本格式存储在数据库中,我是否应该考虑对其进行加密以提高安全性?
当用户登录时,他们输入的密码将被散列,来自数据库的盐添加并重新散列,然后与存储在数据库中的密码进行比较。
如果密码匹配,将创建一个会话,然后将其锁定到单个 IP 地址和用户代理。会话将在短时间内到期。会话将仅用于存储登录令牌,用户名和密码当然不会存储在会话中。
当用户登录时,令牌将被存储到数据库中,并分配给它的用户名,这样我们就可以使用令牌安全地从数据库中提取用户详细信息,而不会有将其存储在会话中的风险。
如果密码不正确,用户将无法登录……呃,我也会对此实施蛮力保护,三次尝试后,用户 IP 和用户代理将被锁定 15 分钟,十次失败尝试后被阻止在防火墙中。
我觉得我忘记了什么,但我不能将手指直接放在它上面。
任何帮助或建议将不胜感激。