gpt4 book ai didi

php - 在 MySQL 数据库中存储不可访问的用户

转载 作者:行者123 更新时间:2023-11-29 02:54:21 24 4
gpt4 key购买 nike

我有一个网站,其中某些区域/功能仅供经过身份验证的用户使用。一些用户在网站出现之前就已经存在,并且目前有活跃的订阅。因此,他们的信息(必然)存在于数据库中,但这些帐户不应该被任何人访问——甚至是他们所属的用户——直到他们验证他们的信息,通过电子邮件接收带有散列参数的链接,并设置他们的密码。

所以:我想将这些用户存储在 Users 表中,但我不希望他们现在能够登录该网站。

目前,我的数据库是这样设置的:

Table: Users

email | password | salt
------------+------------------+----------------
User1 | | // password and salt are
User2 | | // empty strings, not NULL
User3 | md5(pass + salt) | rand(10-digits)
User4 | md5(pass + salt) | rand(10-digits)


Table: Non-Registered Users

email | identify1 | identify2
------------+------------------+----------------
User1 | secret1a | secret1b
User2 | secret2a | secret2b

还有我的 accessControl.php,带有一些为简洁起见的伪代码:

<?php

session_start();
if(isset($_POST['email']) && isset($_POST['password']) {
$sql1 = "SELECT salt FROM Users WHERE email = :email";
.... // prepare and execute
if (!empty($result1)) {
$hash = sha2($password.$result1['salt'],256);
$sql2 = "SELECT * FROM Users WHERE password = :hash AND email = :email";
.... // prepare and execute
if(!empty($result2)) {
$_SESSION['email'] = $_POST['email'];
$_SESSION['password'] = $_POST['password'];
}
}
} elseif(isset($_SESSION['email'] && isset($_SESSION['password'])) {
// do pretty much the same check as above
} else {
// force login
}

?>

所以,我的问题是:非注册用户是否可以在不先设置密码的情况下登录?不可能将空白字段与 anything 的 SHA256 相匹配,对吧?我担心我忽略了一些明显的东西。

拜托谢谢!! :3

最佳答案

SHA256 总是有 256 位,所以它永远不会匹配空字符串。话虽这么说,您的伪代码并未完全描述您如何验证用户输入,因此您仍然容易受到 SQL 注入(inject)攻击。

关于php - 在 MySQL 数据库中存储不可访问的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32344604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com