繁体   English   中英

密码哈希

[英]Password Hashing

我有一个注册表格,其中输入数据被写入数据库。 密码“ pw”将使用BCRYPT进行散列,此代码可正确使用此代码:

$ pwHash = pw_hash($ pw,PASSWORD_BCRYPT,array('cost'=> 10));

问题:

当我要更新数据时,它将无法工作。 下面的代码将未经加密的数据写入数据库。

如何使密码加密?

有人可以帮我从这里出去吗?

 <?php include_once 'dbcon.php'; $id = $_POST['id']; $fn = $_POST['fn']; $ln = $_POST['ln']; $em = $_POST['em']; $hid = $_POST['hid']; $tn = $_POST['tn']; $us = $_POST['us']; $pw = $_POST['pw']; $ul = $_POST['ul']; $chk = $_POST['chk']; $chkcount = count($id); for($i=0; $i<$chkcount; $i++) $pwHash = pw_hash($pw, PASSWORD_BCRYPT, array('cost' => 10)); { $MySQLiconn->query("UPDATE user SET FName='$fn[$i]', LName='$ln[$i]', Email='$em[$i]', HerbalifeID='$hid[$i]', TelNr='$tn[$i]', UplineS='$us[$i]', Password='$pwHash[$i]', UserLevel='$ul[$i]' WHERE UserID=".$id[$i]); } header("Location: indexAdmin.php"); ?> 

我想解决方法如下

<?php
include_once 'dbcon.php';
$id = $_POST['id'];
$fn = $_POST['fn'];
$ln = $_POST['ln'];
$em = $_POST['em'];
$hid = $_POST['hid'];
$tn = $_POST['tn'];
$us = $_POST['us'];
$pw = $_POST['pw'];
$ul = $_POST['ul'];

$chk = $_POST['chk'];
$chkcount = count($id);
for ($i = 0; $i < $chkcount; $i++) {

    $pwHash = password_hash($pw[$i], PASSWORD_BCRYPT, array('cost' => 10));
    $MySQLiconn->query("UPDATE user SET FName='$fn[$i]', LName='$ln[$i]', Email='$em[$i]', HerbalifeID='$hid[$i]', TelNr='$tn[$i]', UplineS='$us[$i]', Password='$pwHash', UserLevel='$ul[$i]'  WHERE UserID=".$id[$i]);
}
header("Location: indexAdmin.php");

的变化是

  1. 在同一循环内创建pwHash变量并更新表。
  2. $pw[$i]作为$id$fn等其他变量进行访问-它们似乎都是数组。
  3. $pwHash不是数组,像标量变量一样访问它。
  4. 使用password_hash函数-根据Paul Crovella的评论进行更新

与代码有关的几个问题。 我认为,最主要的事实是该代码已对SQL注入攻击开放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM