【问题标题】:How to prevent double md5-ing of password field on update form?如何防止更新表单上密码字段的双重 md5-ing?
【发布时间】:2011-07-26 10:39:55
【问题描述】:

在我的用户信息更新表单上,我让用户更新通行证以及其他内容。如果他们不想更新表单中的密码,则将其留空,因为该字段留空。在流程页面上,如果该字段为空白,我会从数据库(其 md5)插入他们现有的密码,如果他们更改了密码,我希望输入新密码。下面是我用来尝试完成该操作的内容,但它是双重的无论如何,md5-ing:

      if (!get_magic_quotes_gpc()) {

$newpass = mysql_escape_string($_POST['password']);
$newpass = md5($_POST['password']);

    }

    // If $dob is empty
    if (empty($newpass)) {

    $newpass = "$passis"; //$passis = the password stored in db which is md5
        }

【问题讨论】:

  • 我敢打赌if (empty($newpass)) 永远不会是真的。
  • 你为什么经常分配$newpass?为什么你甚至想用数据库中的密码填充它?如果不想更新密码,请将其留空并且不要更新它
  • @poke 是的,但是如果他们想更新它怎么办,我怎么知道??
  • 如果他们提交的字段是空的,他们不想更新它,所以不要这样做。如果里面有东西,请更新它。无需将数据库中的值放入任何内容中。

标签: php passwords md5


【解决方案1】:

$newpass 永远不会为空,因为 md5 将空字符串转换为哈希。所以这个条件行不通:if (empty($newpass)) {

相反,你必须这样做

 if (empty($_POST['password'])) {

更新

 if (!get_magic_quotes_gpc()) {

$newpass = mysql_escape_string($_POST['password']);
$newpass = md5($_POST['password']);

}

// If $dob is empty
if (empty($_POST['password'])) { 
   $newpass = "$passis"; //$passis = the password stored in db which is md5
}

【讨论】:

  • 嘿...我仍然遇到同样的问题:这就是我正在做的事情: if (empty($_POST['password'])) { $_POST['password'] = $passis ; }
  • 是的,因为$_POSTpassword 只能在条件中使用,而不是用于分配不要这样做: $_POST['password'] = $passis;你必须这样做: $newpass = $passis;查看我的答案更新
【解决方案2】:

对您的代码稍作修改:

  $newpass = $_POST['password'];

  if (!get_magic_quotes_gpc()) {
      $newpass = mysql_escape_string($newpass);
  }

  if(empty($newpass)) {
    $newpass = "$passis"; //$passis = existing md5'd password already stored in db
  }
  else {
    $newpass = md5($newpass); //$newpass = newly provided password needs to be md5'd before updating db
  }     

【讨论】:

    【解决方案3】:

    您的代码很奇怪,因为它仅在设置了 magic_quotes_gpc 指令时才执行 md5。
    另一种认为是空字符串的md5不是空字符串。

    这是一个更好的代码:

    $newpass = isset($_POST['password']) ? $_POST['password'] : '';
    if ($newpass=='') {
      $newpass = $passis; // $passis = the password stored in db which is md5
    } else {
      if (get_magic_quotes_gpc()) $newpass = stripslashes($newpass); // take off slashes added by PHP if any
      $newpass = md5($newpass);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 2012-11-26
      • 2020-01-04
      • 2012-04-05
      相关资源
      最近更新 更多