【发布时间】:2018-04-10 18:38:32
【问题描述】:
我将表单中的数据发布到此逻辑以注册用户。我遇到的问题是如何在此逻辑中获取发布到 $userpw 变量的信息并将其传递给令牌,然后将令牌内容作为用户密码插入到数据库中。我对PHP很陌生,请放轻松。我是否只是将插入语句更改为包含令牌变量而不是 userpw 变量?
//---sanitize function on a different file.
require 'sanitize.php';
//-------------variables including the hashed token--------------
$userid = $username= $userpw = $userfname = $userlname = '';
$salt = "qm&h*";
$pepper = "pg!@";
$token = hash('ripemd128', "$salt$userpw$pepper");
//--------existing insert logic-------------
if (isset($_POST['user_name']) &&
isset($_POST['user_pw']) &&
isset($_POST['user_fname']) &&
isset($_POST['user_lname']))
{
$username = sanitizeString($_POST['user_name']);
$userpw = sanitizeString($_POST['user_pw']);
$userfname = sanitizeString($_POST['user_fname']);
$userlname = sanitizeString($_POST['user_lname']);
$query = "INSERT INTO users (user_name, user_pw, user_fname, user_lname) VALUES" .
"('$username', '$userpw', '$userfname', '$userlname')";
$result = $conn->query($query);
if (!$result) echo "INSERT failed: $query<br>" .
$conn->error . "<br><br>";
【问题讨论】:
-
存储密码时使用
password_hash(),检查密码时使用password_verify()。 -
^...并且不要将数据连接到查询中,而是使用准备好的语句
-
如果你想学习错误的方法,这就是要走的路。如果您想学习 正确 方法,您需要检查 A) 您正在使用带有占位符值的准备好的语句。 B)您正在使用像 Bcrypt 这样的密码级散列函数,
password_hash默认使用方便,并且 C)您有很好的示例可供使用,而不是由不知道他们做什么的人编写的 YouTube 教程正在做。 -
这些东西很难完全正确,任何不完美的东西都会使您、您的用户以及您的公司面临巨大的风险。例如,只需一个 SQL 注入漏洞即可导致完全混乱并破坏或危及生产数据库。
-
IMO 如果一本书或教程推荐了这样的东西,你放弃它并寻找更好的。如果您正在学习,请学习良好的做法。