所以,通过一系列未知事件,我发现自己现在正在为业务线应用程序开发 Web 应用程序。我只是一个爱好 php 的作家,我不使用 PDO 或任何框架(主要是因为我从来没有时间深入研究它们)。因此,我尽我所能编写了该应用程序。该工具提供了出色的工作,所以这不是问题。 Security 不过,我希望您能了解我的想法的安全性。
首先,如果不登录,则无法访问该工具的任何部分。该域具有 SSL 证书并通过 Azure 托管。作为第一道防线,我使用 web.config 来限制基于 IP 的访问,以将其托管为内网解决方案。
其次,登录基于here可用的教程。简而言之,在注册时,会生成一个随机盐,对密码进行哈希处理,然后再次使用附加的盐进行哈希处理。该值与盐一起存储在数据库中。提交登录表单后,密码将通过 javascript 进行哈希处理。此值附加到新的隐藏输入中的表单,并清除旧密码字段以确保密码不会以未加密的方式发送。然后使用电子邮件地址从数据库中获取密码和盐,并进行引用。在登录时,登录字符串保存在会话中,用于在用户登陆的每个页面上验证用户。此登录字符串基于密码及其 IP 地址的哈希值。此登录字符串也保存到 cookie 中以用于自动登录目的。自动登录的工作原理是将登录字符串存储在 cookie 和登录表中。如果用户访问应用程序,cookie 将检查数据库中的字符串。如果找到,它会检查其 IP 地址。如果它通过验证,则用户已登录。
登录页面上的表单本身使用 filter_input 进行过滤,如下所示:
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
之后查询本身是一个 mysqli 准备语句。
接下来,登录后,安全是根据每个页面的login_check函数来确保用户登录的。在index.php中我还定义了一个logged = true值:
define('loggedin', TRUE);
用于在每个页面上验证它不是直接访问的,如果是,则重定向到'/'
if(!defined('loggedin')) {
header("Location: /");
die();
}
使用 get 或 post 的所有其他形式的数据库查询(我不使用 env 或服务器),查询已准备就绪。还准备了使用户能够将数据输入数据库的所有表格;显示 html 结果的表单由 htmlentities() 清理。
我现在不知道我是否可以做更多的事情来保护应用程序。它将处理敏感信息,因此我希望您能提供我可以做些什么来加强系统的意见:)
非常感谢!