0

目標: ログインを作成しようとしています。登録ページはこれを使用して、入力に基づいてユーザー名とパスワードを作成します。

登録

 <?php
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="dbname"; // Database name 
$tbl_name="Student"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

/* Obliterate bad input */
$secUser = mysql_real_escape_string($_POST['reguser']);
$badpasses = $_POST['regpass'];
$salt = '~Z`!@#$%I^&*()_-+Q=}]{[\|"><';
$secPass = hash('sha512', $badpasses.$salt);

$sql= "INSERT INTO Student (uname, upass, fname, lname, email, currGrade)                VALUES('$secUser','$secPass','$_POST[regfirst]','$_POST[reglast]','$_POST[regemail]','$_POST[regclassrank]')";

$result = mysql_query($sql);
if (!$result) {
    die('Invalid query: ' . mysql_error());
}
else{
echo "Registered";
}

?>

ログイン.php

<?php
ob_start();
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="dbname"; // Database name 
$tbl_name="Student"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$salt = '~Z`!@#$%I^&*()_-+Q=}]{[\|"><';
$myusername = $_POST['uname']; 
$mypassword = $_POST['upass'];
$mypassword = hash('sha512', $mypassword.$salt);

$sql = "SELECT * FROM $tbl_name WHERE uname = '$myusername' AND upass = '$mypassword')";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("regduser");
session_register("regdpass"); 
header("location:login_success.php");
}
else {
echo "$mypassword<br />";
echo "Wrong Username or Password";
}

ob_end_flush();
?>

表示されるエラーは ですが、Wrong User or Passログインしようとしたときのパスワードは次のとおりです。

bffbc4f94f40d0cece6774ed9ec792b03ad5362edf768d190913d033c46ad4af4e2cbe1d42134f58da402efb7d3209b7e9b62ff3e81caf6341262b24dd300e9a

ユーザーのデータベース内のパスワードとデータベース内のpoopパスワードpoopは次のとおりです。

4e4d252a08ac4c35c2917b4fc715fef13bac2b686c7ebc8f8256765bd584a89634df3fa455ed73c1fbec84d442f11d5e064749396dcb1c0f1525f82c1b0ea57a

これらのパスワードが異なるのはなぜですか?! 誰か助けてくれませんか?

4

3 に答える 3

2

したほうがいい

// Define $myusername and $mypassword 
$salt = '~Z`!@#$%I^&*()_-+Q=}]{[\|"><';
$myusername = $_POST['uname']; 
$mypassword = $_POST['upass'];
$mypassword = hash('sha512', $mypassword);

ない

// Define $myusername and $mypassword 
$salt = '~Z`!@#$%I^&*()_-+Q=}]{[\|"><';
$myusername = $_POST['uname']; 
$mypassword = $_POST['upass'];
$mypassword = hash('sha512', $mypassword.$salt);

?

登録時にパスワード ハッシュにソルトを追加しますが、ログインを試みるときには追加しません。

また、データベース クエリに直接 POST するのではなく、クエリで使用されるすべての POST 変数に mysql_real_escape を使用することを強くお勧めします。さらに良いのは、準備済みステートメントを使用することです。

それはまったく役に立ちますか?

于 2011-08-09T15:00:46.743 に答える
0

変数$_POST['upass'];が空です。フォーム フィールドが実際に呼び出されているかどうかを確認しますupass

この情報に基づいて:

>> $salt = '~Z`!@#$%I^&*()_-+Q=}]{[\|"><';
'~Z`!@#$%I^&*()_-+Q=}]{[\\|"><'

>> hash('sha512', 'poop'.$salt);
'4e4d252a08ac4c35c2917b4fc715fef13bac2b686c7ebc8f8256765bd584a89634df3fa455ed73c1fbec84d442f11d5e064749396dcb1c0f1525f82c1b0ea57a'

>> hash('sha512', ''.$salt);
'bffbc4f94f40d0cece6774ed9ec792b03ad5362edf768d190913d033c46ad4af4e2cbe1d42134f58da402efb7d3209b7e9b62ff3e81caf6341262b24dd300e9a'
于 2011-08-09T18:25:04.000 に答える
0

ログインスクリプトで「salt」が使用されている場所がわかりません。たぶん、次のことを試してください:

$mypassword = hash('sha512', $mypassword . $salt);
于 2011-08-09T15:02:59.910 に答える