【发布时间】:2016-03-17 01:14:24
【问题描述】:
我正在尝试创建一个注册表单,允许潜在用户输入他们的名字和姓氏、用户名和密码。有了这个密码,我想使用 PHP 的哈希函数和一些“盐”来保证密码的安全。为此,我在我的 PHP 脚本中创建了一个函数来节省冗余。为此,我将变量 $connection、$iniSalt 和 $endSalt 更改为全局变量——我认为这将允许我在函数 addUser() 中使用它们。 有人可以告诉我我在这里做错了什么吗?任何有关如何解决此问题的建议将不胜感激。这是我的代码:
global $connection;
$connection = new mysqli($db_host, $user, $pass, $db);
if ($connection->connect_error) {
die($connection->connect_error);
}
$query = "CREATE TABLE users (
firstname VARCHAR(32) NOT NULL,
lastname VARCHAR(32) NOT NULL,
username VARCHAR(32) NOT NULL UNIQUE,
password VARCHAR(32) NOT NULL
)";
$result = $connection->query($query);
if (!$result) {
die($connection->error);
}
global $iniSalt, $endSalt;
$iniSalt = "xb&z*";
$endSalt = "nb!@";
function addUser($conn, $firstname, $lastname, $username, $password) {
$token = hash('ripemd128', "$iniSalt$password$endSalt");
$query = "INSERT INTO users VALUES('$firstname', '$lastname', '$username', $token)";
$result = $connection->query($query);
if (!$result) {
die($connection->error);
}
}
addUser($connection, 'Bill', 'Murray', 'bmurray', 'mysecret');
addUser($connection, 'Jacki', 'Hughes', 'jhughes', 'somepw');
【问题讨论】:
-
全局属于函数内部。
-
红旗 =>
password VARCHAR(32)告诉我们您没有使用安全的哈希函数,或者您将其设置得太低。如果$token是一个字符串,你也需要引用它,并且似乎是一个字符串。那会在那里引发语法错误,或者“一旦”该查询启动。 -
@Fred-ii- 与您的红旗声明...您是否暗示我需要使 VARCHAR 的数量远大于 32,因为哈希将返回?
-
@Fred-ii- 对不赞成票问题感到抱歉。你对我帮助很大。感谢您花时间给我详细的答复。学习这个具有大量 Java 背景的 Web 编程 - 所以让经验丰富的 PHP 程序员来找我真的很有帮助。最好的。
-
@zhughes3 谢谢,但你不需要为那个人道歉。他只是在他自己的小方面很迟钝和特别。让他投反对票,社区会看到谁对谁错。而他……嗯,他只是单纯的“不合时宜”。我们回到了很长的路lol,也不是很好。 噗。我很高兴“真正地”帮助了你。它是“诚实的”,它是“纯洁的”。享受编码,干杯