Как предотвратить двойное md5-поле ввода пароля в форме обновления? - PullRequest
2 голосов
/ 31 марта 2011

В моей форме обновления информации о пользователях я позволяю пользователям обновлять проход вместе с другими вещами. Если они не хотят обновлять пароль в форме, они оставляют его пустым, так как поле остается пустым. На странице процесса, если поле пустое, я вставляю их существующий пароль из БД (его 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
        }

Ответы [ 3 ]

2 голосов
/ 31 марта 2011

$newpass никогда не будет пустым, потому что md5 преобразует пустую строку в хеш. Так что это условие не будет работать: if (empty($newpass)) {

Вместо этого вы должны сделать

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

UPDATE

 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
}
1 голос
/ 31 марта 2011

Ваш код странный, потому что он выполняет md5, только если установлена ​​директива magic_quotes_gpc.
Другое мнение состоит в том, что 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);
}
1 голос
/ 31 марта 2011

Немного переработав код:

  $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
  }     
...