0

そこで、phpとmysqlデータベースを使用して非常に大雑把なログインフォームを作成し、「loginFailed = true&reason = password」を使用してログインページにリダイレクトするように設定しました(またはそう思います)。ログインにリダイレクトして、間違ったパスワードメッセージを表示するだけですが、代わりにメインのインデックスページにリダイレクトします。

私はここで何が間違っているのですか?確かに、コーディングの知識が不足しているため、既存のコードから多額の借用をしましたが、リダイレクトする前に、意図したとおりに機能しました。

コードは次のとおりです。

passwordcheck.php

// 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");

// username and password sent from form 
$password=$_POST['password']; 

// To protect MySQL injection (more detail about MySQL injection)
$password = stripslashes($password);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM $tbl_name WHERE password='$password'";
$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("password"); 
header("location:admin.html");
}

else {
die(header("location:login.html?loginFailed=true&reason=password"));
}
?>

ログインページのパスワードフィールドは次のとおりです。

<span class="add-on"><i class="icon-list-alt"></i></span>
<input type="password" id="inputIcon" class="span4" name='password' id='password' maxlength="50" placeholder="<?php $reasons = array("password" => "Yo shitbird, wrong password."); if ($_GET["loginFailed"]) echo $reasons[$_GET["reason"]]; ?>" />
</div>
4

1 に答える 1

0

header()コマンドをdie()呼び出しから移動してみてください。

else {
    header("location:login.html?loginFailed=true&reason=password");
    die();
}

このコードには他にも多くの潜在的な問題があります。このテーマに関するいくつかのチュートリアルを読むことをお勧めします。そこにはたくさんあります。注意してくださいが、危険な方法を教える可能性のある低品質のPHPチュートリアルがたくさんあります。特にこのコードが公的にアクセス可能なWebサーバー上にある場合は、PHPのセキュリティについてさらに学ぶことが重要です。

問題の1つは、パスワードをプレーンテキストで保存しているという事実です。パスワードはプレーンテキストで保存しないでください。安全なハッシュアルゴリズムを使用してソルトして保存する必要があります。PHPassは、これを支援する優れたユーティリティです。

于 2012-11-15T00:04:17.490 に答える