0

http://www.phpeasystep.com/phptu/26.htmlのチュートリアルを使用して、Web サイトのログインフォームを作成しました。データベースの uPassword フィールドを md5 に設定しており、データベース内のすべてのパスワードは md5 で暗号化されています。

ログインは完全に機能しますが、登録フォームの作成について少し混乱しています。

フォームは、ユーザーが希望するパスワードを入力するように要求します。ユーザーが入力したパスワードを取得し、それを md5 に変換してから、md5 パスワードをユーザー テーブルの uPassword フィールドに入力する方法について、少し混乱しています。

以下は、processregistration.php ファイルのコードです。

/* Database connection info*/
mysql_select_db("dbname", $con);

$encryptedpassword = md5($_POST['uPassword']);

md5($uPassword);

$sql="INSERT INTO users (uName, uPassword, uSurname, uFirstName)
VALUES
('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]'";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "Account created.  You can now login";

mysql_close($con)
?>

上記のコードは次のようになっています。

  • encryptedpassword という名前の変数を作成します
  • uPassword を暗号化パスワードとして使用する
  • 暗号化されたパスワードを MD5 に変換する
  • MD5 パスワードを uPassword としてユーザー テーブルに入力します。

どこかで正しい変数を使用していないか、構文で単純なエラーを犯したと確信しています。コメント/ヘルプは大歓迎です!

ありがとう、クリス・M

4

3 に答える 3

0

コードには、次のような検証とエスケープが必要です。

<?php

/* Database connection info */
mysql_select_db("dbname", $con);

if ($_REQUEST['METHOD'] == 'POST') {
    $uName = filter_input(INPUT_POST, 'uName');
    $uPassword = filter_input(INPUT_POST, 'uPassword');
    $uSurname = filter_input(INPUT_POST, 'uSurname');
    $uFirstName = filter_input(INPUT_POST, 'uFirstName');

    // do some validation here ...

    // if everything OK, then crypte the password
    $hashedPassword = md5($uPassword);

    // and store it

    $sql = sprintf(
        'INSERT INTO users (uName, hashedPassword, uSurname, uFirstName)
         VALUES (%s, %s, %s, %s);',
            mysql_real_escape_string($uName, $con),
            mysql_real_escape_string($hashedPassword, $con),
            mysql_real_escape_string($uSurname, $con),
            mysql_real_escape_string($uFirstName, $con)
    );

    if (!mysql_query($sql,$con)) {
        die('Error: ' . mysql_error());
    }

    mysql_close($con);
    echo "Account created.  You can now login";
}

?>

今すぐログイン

<?php

if ($_REQUEST['METHOD'] == 'POST') {
    $uName = filter_input(INPUT_POST, 'uName');
    $uPassword = filter_input(INPUT_POST, 'uPassword');
    $hashedPassword = md5($uPassword);

    $sql = sprintf(
        'SELECT * FROM users WHERE uName = "%s" AND hashedPassword = "%s" LIMIT 1',
            mysql_real_escape_string($uName, $con),
            mysql_real_escape_string($hashedPassword, $con),
        );

    // etc etc ...
}
?>
于 2011-01-26T10:58:53.380 に答える
0
/* Database connection info*

コメントを適切に閉じていませんでした。/行末にa を追加します。

ああ、MD5 は安全ではありません。代わりに SHA1 を使用してください。またはさらに良いことに、salted SHA1 を使用します。

また、使用してデータベースに入力するすべてのユーザー入力のエスケープを開始する必要があります。そうしないとmysql_real_escape_string()Little Bobby Tablesでデータベースを大いに楽しむことができます。

于 2011-01-26T10:43:11.620 に答える
0

/* データベース接続情報*/

 mysql_select_db("dbname", $con);

$encryptedpassword = md5($_POST['uPassword']);

$sql="INSERT INTO users (uName, uPassword, uSurname, uFirstName)
VALUES
('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "Account created.  You can now login";

mysql_close($con)
?>

括弧の終了はクエリの問題です

('$_POST[uName]','$encryptedpassword','$_POST[uSurname]','$_POST[uFirstName]'";

これはクロージングが必要です ' ) '

于 2011-01-26T10:58:03.847 に答える