Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Hashowanie hasła - md5
Forum PHP.pl > Forum > PHP
darophp
Słuchajcie, mam dosyć dziwny problem. Mianowicie robię panel klienta i wszystko jest zrobione od jakiegoś czasu. Nie testowałem skryptu logowania - do dzisiaj. gdy chcę się zalogować do bazy a hasło mam ustawione test1234 to zaloguje. Natomiast gdy wyłączę kompa i włączę jeszcze raz to hasło się zmienia (resetuje) na:
Kod
d41d8cd98f00b204e9800998ecf8427e

Z tego co się dowiedziałem u wujka Google oznacza to null lub inaczej 0 czy nawet brak znaków.
Czym to może być spowodowane ?
Tak wygląda struktura:
password | varchar(32) | latin2_general_ci | Nie | None
erix
A to nie jest przypadkiem tabela memory?
darophp
To jest tabela MYlSAM.

Edit:

Dodam kod ...
Kod
session_start();

$login     = $_POST["login"];
$haslo     = $_POST["password"];

if ($_GET["login"]=="end") {
  session_unset();
  session_destroy();
} else if ($login<>"" and $haslo<>"") {
  $password = md5($haslo);
  if ($connect) {
    if (mysql_select_db($mysql_baza)) {
      $wynik=mysql_query("SELECT * FROM clients WHERE login='$login' and password='$password'");
      if (mysql_num_rows($wynik)==1) {
        $dane=mysql_fetch_array($wynik);
        $_SESSION["logged"]="yes";
        $_SESSION["login"]=$dane["login"];
        $_SESSION["email"]=$dane["email"];
        ...
      }
    } else echo "Nie można połączyć się z bazą";
    mysql_close($connect);
  }
}
erix
  1. if ($_GET["login"]=="end") {
  2. }

Wiem, że się czepiam, ale po co tu session_unset?
darophp
Chyba zadziałało usunięcie. Ale teraz trzeba kliknąć dwa razy w butona aby wylogowało. No tyle mogą zrobić klienci biggrin.gif Jeśli coś będzie nie działać będę pisał.
erix
Samo session_destroy wystarczy. session_unset jest do czego innego, w dodatku - ma status deprecated.
darophp
Coś jakby dalej jest problem...

erix
coś, to znaczy co?
darophp
Zobacz ze w polu password występuje 0 czyli nic a były hasła np ...cc18sd5... no jakoś tak się zaczynało
phpion
Cytat(darophp @ 13.06.2010, 21:38:20 ) *
Zobacz ze w polu password występuje 0 czyli nic a były hasła np ...cc18sd5... no jakoś tak się zaczynało

Cytat(darophp @ 13.06.2010, 21:20:01 ) *

Ja tam widzę hashe, a nie 0.

//Edit:
Już wiem - są to hashe pustego ciągu. Czyli musisz gdzieś mieć UPDATE, który aktualizuje ci hasła (i to bez warunku). Innej opcji nie widzę.
darophp
Nosz kur..cze Jak to poprawić ?
Kod
if ($page=="settings") {
  echo "<p>Twój login: ".$_SESSION["login"]."<br/>Twój email: ".$_SESSION["email"]."</p>";
  $password = md5($_POST["password"]);
if ($connect) {
  $wynik = mysql_query("UPDATE clients SET password='$password' WHERE login='{$_SESSION["login"]}'");
echo <<<FORM
<form action="/index.php?page=settings" method="post">
<p>Hasło: <input type="password" name="password" /></p>
<input type="submit" class="change" value=" " />
</form><div style="margin-top: 310px;"></div>
FORM;
}
}
phpion
Pewnie $_POST['password'] masz puste. I pewnie wiem dlaczego: nie sprawdzasz czy formularz został wysłany tylko z pały aktualizujesz dane. Sprawdź czy formularz został wysłany (np. count($_POST) > 0) albo sprawdź samą długość $_POST['password'] > 0.
darophp
No właśnie ... tylko jak to zrobić .. ?
Kod
if ($page=="settings") {
  echo "<p>Twój login: ".$_SESSION["login"]."<br/>Twój email: ".$_SESSION["email"]."</p>";
  $password = md5($_POST["password"]);
if ($connect) {
  $wynik = mysql_query("UPDATE clients SET password='$password' WHERE login='{$_SESSION["login"]}'");
if (empty($_POST["submit"])) {
echo <<<FORM
<form action="/index.php?page=settings" method="post">
<p>Hasło: <input type="password" name="password" /></p>
<input type="submit" class="change" value=" " />
</form>
FORM;
}
   else {
     echo "Błąd. Nie zmieniono hasła."; }
}
echo "<div style=\"margin-top: 310px;\"></div>";
}
thek
$_POST w formularzu zawsze będzie > 0, bo zaliczy submita choćby więc to żadne zabezpieczenie. Tu trzeba sprawdzać prędzej czy aby !empty( $_POST['password'] ) i od tego uzależniać także czy update jest czy nie. Oczywiście to tylko z grubsza zarysowane. Powinieneś od razu zabezpieczać form przed odświeżaniem smile.gif
phpion
Cytat(thek @ 16.06.2010, 21:18:42 ) *
$_POST w formularzu zawsze będzie > 0, bo zaliczy submita choćby więc to żadne zabezpieczenie.

Na marginesie: nie zgodzę się. Jeśli nie nadasz nazwy submitowi (poprzez atrybut name) to nie pojawi się on w tablicy $_POST.
thek
No tak... o Tym przypadku zapomniałem smile.gif Choć z drugiej strony dowolny input type="text", też sprawi, że $_POST nie będzie pusta. A w sumie rzadko używa się formularzy, które nie mają żadnego pola do uzupełnienia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.