0

私はセキュリティに詳しくないので、インターネットで見つけた情報に頼っています。彼が何をしていて、彼の方法がどのように機能するかを少し説明している誰かのサイトを見つけました。人々はそれをコピーして貼り付けて物事を楽にするかもしれません. 私はかなり多くのことを理解していますが、自分で思いつくことができませんでした (私は PHP/XHTML などにかなり慣れていません)。

Web サイト: How to store safe with PHP and MySQL

彼はチュートリアルで PDO を使用しています。そして、データベースに情報を保存できます。しかし、彼が実際にログインするためのコードを提供するスクリプトを使用しようとすると、エラーが含まれているようです。

私はすべてを解決し、すべて正常に動作しますが、ハッシュ化されたパスワードと挿入されたパスワード (ハッシュなど) との比較は正しく機能しません。

ここで何が起こっているのですか?

前もって感謝します!

編集

人々はコードを求めてきたので、ここにあります:

session_start();  
  require('config.php');

  // Setting up a connection
  $MyConnection = new PDO('mysql:host=*;dbname=*', $dbuser, $pass);

  // Retrieving information from form.
  $username = $_POST['username'];
  $password = $_POST['password'];

  $sth = $MyConnection->prepare("SELECT * FROM AMP_Users WHERE Username = :username LIMIT 1");
  $sth->bindParam(':username', $username);
  $sth->execute();

  $user = $sth->fetch(PDO::FETCH_OBJ);

  // Hashing the password with its hash as the salt returns the same hash
  if (crypt($password, $user->hash) == $user->hash) {
    echo 'You are now logged in. If we actually used sessions this time.';
  }

コードが機能し始めたら、$_SESSION['name'] = $username を追加します。これまでは、うまくいったかどうかをエコーするだけでした。そして、何も表示されないため、機能しません。

2回目の編集

簡単な更新として、私が提供するスクリプトは WHOLE スクリプトです。何も出さない。(データベースの名前などを除く)したがって、パスワードをデータベースに保存するハッシュスクリプトを使用していないことが問題なのだろうか。入れても反応しません。私はまだ何か間違ったことをしていますか?

4

4 に答える 4

0

このスレッドが数か月前のものであることは知っていますが、誰かがこの SunnyTuts php pdo login and registration tutorial を見つけるかもしれません

チュートリアルが役立ちます。ユーザーがログインできるようにする安全な方法を探しているときに、このスレッドとチュートリアルの両方を見つけました。PHP と Web デザインに慣れていないので、理解するのが少し難しいと感じましたが、一部の人にとっては簡単なことのように思えると思います....

于 2014-01-01T13:47:56.943 に答える
0

おそらく、データベースにパスワードを保存するフィールドの長さを確認する必要があります...長さが短い場合、ハッシュされたパスワードは全体として保存されません..その一部を保存します!

于 2013-09-26T18:02:15.583 に答える
0

mysqli で実行するように変更しましたが、正常に動作します。

            $getAuth=$dbConAU->prepare("SELECT Password FROM Users WHERE UserName=? LIMIT 1");

            $getAuth->bind_param("s",$UserName);
            $getAuth->execute();
            $getAuth->bind_result($hash);
            $getAuth->fetch();
            $getAuth->close();

            if (crypt($Password, $hash) == $hash) {
                return "OK";
                }
                else { return "Not OK"; }
于 2013-09-26T19:26:45.370 に答える