【问题标题】:Passing password input to a salted hash token before insert to mysql DB在插入到 mysql 数据库之前将密码输入传递给加盐哈希令牌
【发布时间】: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 如果一本书或教程推荐了这样的东西,你放弃它并寻找更好的。如果您正在学习,请学习良好的做法。

标签: php mysql passwords


【解决方案1】:

根据 cmets,这是正确的更改:

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', '$token', '$userfname', '$userlname')";
         $result   = $conn->query($query);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2019-06-21
    • 2011-12-06
    • 2021-03-18
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多