私を助けてくれますか?問題は毎回(正しいユーザー名とパスワードの組み合わせを入力すると)、「Failed 2」というエラーメッセージが表示されることです。私のmysqlログインコードで何が問題になっていますか?
<?php
if (isset($_POST["login-submit"])) {
if(!empty($_POST["username"]) && !empty($_POST["password"])) {
$username = $_POST["username"];
$password = $_POST["password"];
$username = mysql_set_charset($username);
$password = mysql_set_charset($password);
$username = stripcslashes($username);
$password = stripcslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$result = mysql_query("select * from user where username = '$username' and password = '$password'");
$row = mysql_fetch_array($result);
if($row["username"] == $username && $row["password"] == $password) {
//header("Location: index.php");
echo "<p>Login</p>";
} else {
echo "<p>Failed 2</p>";
}
} else {
echo "<p>Failed 1</p>";
}
}
?>
mysql_queryを実行する前に '$ username'と' $ password'をエコーしましたか?あなたの問題は 'mysql_set_charset'呼び出しにあります。その[documentation](http://php.net/manual/en/function.mysql-set-charset.php)を見てください。 'TRUE'または' FALSE'を返すだけです。これは、接続の文字セットを設定するために使用されます。 – Hicaro
最大の間違いはパスワードをハッシュしていないことです! *ハッシュされていないパスワードを保存するたびに、rootが/ dev/nullに子猫を移動させます。 - 'password_hash()'と 'password_verify()'を使います。また、廃止された古いmysql関数を使用しています。PHP7 **で**を削除した場合は、代わりにmysqliまたはPDOを使用してください。また、パラメータ化されたステートメントを使用する - スラッシュをスティッシュすると** SQL注入から完全に保護されない** –
ハッシュ関数を使用するだけでは不十分で、単に塩を追加するだけでセキュリティを向上させることはほとんどありません。代わりに、約100msの持続時間の間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存してください。 'PBKDF2'(別名' Rfc2898DeriveBytes')、 'password_hash' /' password_verify'、 'Bcrypt'などの関数を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。ユーザーを保護することが重要です。安全なパスワード方法を使用してください。 – zaph