Security 密码保护,同时跟踪谁是谁

Security 密码保护,同时跟踪谁是谁,security,php,Security,Php,我经营一个农贸市场。该网站的一部分包括一个数据库,其中包含了所有不同的农民以及他们本周的收获情况 目前,我有一套管理页面,这是对公众隐藏的事实,我没有告诉任何人他们在哪里。使用管理页面,我可以根据需要编辑数据。随着越来越多的农民参与进来,更新他们的数据变得越来越困难,我想设置它,这样每个农民都可以注册,使用自己的密码登录,并在本周编辑他们在市场上的数据,而不需要我参与 我见过很多密码保护页面的纸条。我看到的那些已经设置好,一旦用户登录,他们就可以查看所有内容,而且似乎没有一种简单的方法来跟踪谁登

我经营一个农贸市场。该网站的一部分包括一个数据库,其中包含了所有不同的农民以及他们本周的收获情况

目前,我有一套管理页面,这是对公众隐藏的事实,我没有告诉任何人他们在哪里。使用管理页面,我可以根据需要编辑数据。随着越来越多的农民参与进来,更新他们的数据变得越来越困难,我想设置它,这样每个农民都可以注册,使用自己的密码登录,并在本周编辑他们在市场上的数据,而不需要我参与

我见过很多密码保护页面的纸条。我看到的那些已经设置好,一旦用户登录,他们就可以查看所有内容,而且似乎没有一种简单的方法来跟踪谁登录了

如何在跟踪谁是谁的同时构建密码保护,以便动态构建自定义管理员页面?有什么要记住的提示或最佳实践吗

谢谢

布兰登
另外,我一直在使用PHP和SQLite,确保每个用户都有唯一的登录(最好是电子邮件)和密码。然后创建一个包含两个用户名和密码输入字段的表单,在回发后,将这些值与数据库匹配。如果数据匹配,则在会话中存储用户id(或更多用户数据)

遵循您在网上找到的这些脚本

归结起来就是:

  • 注册页面以收集用户详细信息,保存后检查每个字段是否有效(即使用正则表达式检查电子邮件地址是否有效),并检查所有必填字段是否已完成
  • 如果以上所有内容都已签出,则在清理数据后保存到数据库(我们现在不需要任何SQL注入!)
  • 我建议至少将密码保存为散列,因此使用类似于
    md5()
    的东西,我也会使用salt密钥(类似于md5($password.$salt))-salt可以是用户注册时的时间戳,一个随机的字母/数字字符串(我建议),并将其保存在数据库中
  • 当用户登录时,清理数据,检查username是否存在并获取匹配条目的salt密钥,然后用salt密钥MD5输入密码并查看字符串是否匹配
  • 将某种标志保存到$\u会话,例如$\u会话['loggedin']=true然后在每个受保护页面的顶部,您可以执行以下示例中的操作
  • 然后,您还可以将时间戳(
    time()
    )或日期时间(
    date(“Y-m-dh:i:s”)
    )保存到数据库中标记为last\u logged\u in的列下
我知道这不是一堆代码,但它形成了一个基本的指南,让你开始

上述示例

if($_SESSION['loggedin'] !== true){
    header("Location: login.php");
    exit;
} else {
    // rest of protected page
}

为了找出谁是谁,我将使用sessions($\u SESSION变量)

制作一些简单的登录页面,设置一些id或使用电子邮件作为登录,如果你愿意,你也可以制作一些注册页面

使用随机字符串作为用户的密码,将其发送给用户,并告诉他们在第一次登录时更改密码

不要在数据库中存储密码。仅使用密码哈希(例如sha512)。如果您想提高安全性,请使用服务器盐或用户盐。 在每次登录时,将用户输入的密码哈希值和数据库中存储的密码进行比较。
请注意SQL注入漏洞,我建议使用PDO并插入变量作为参数。

您可以使用,也可以基于此构建自己的。跟踪用户在这两种情况下都非常容易(分别是唯一的名称和会话id)。

我不理解您的问题。除了让每个用户登录并编辑自己的信息之外,您还想要什么特别的东西吗?这是一个非常广泛的问题,在这里可能无法有效地回答。听起来好像你需要看看CMS。你可以在谷歌上搜索并选择一个适合你的。这会让你省去重新发明一个非常大的轮子。目前我有一个管理页面,由于我没有告诉任何人,它对公众是隐藏的。。。。哈哈。你是在自找麻烦,老兄……谢谢你提供了非常清晰的待办事项清单,这将非常有帮助。在保持安全的同时,我需要什么来跟踪谁有哪些会话?我猜我应该做的不仅仅是在他们登录时将userID分配给会话中的变量,然后在我断开页面之前检查变量?或者它真的那么简单?在会话中存储用户ID之类的东西以及令牌(在每个用户登录的数据库和会话中生成并存储一个新的令牌)也是一个好主意-然后可以将用户ID与令牌进行比较,如果它们不匹配-作为安全预防措施,自动注销用户。您还可以添加一些其他的小功能,例如超时(因此将最后一个操作作为时间存储在数据库中,如果时间太长,则自动注销用户)。如果这有帮助,请随意勾选它作为答案:)