PHPが「ログインできなくて残念です」というエラーが発生しています。私の条件の1つによれば、ログインが正しい場合でも、私のPreparedシステムがSQLインジェクションを避けることができなくても設定されます。Prepared文を作成してログインするときにエラーになるPHP
だから私のコードは次のようになります:
global $connected;
$post = filter_var_array($_POST, FILTER_SANITIZE_STRING);
$pwwd = $post['password'];
$usrn = $post['username'];
$usrn = mysqli_real_escape_string($connected, $usrn);
$pwwd = mysqli_real_escape_string($connected, $pwwd);
if (strlen($usrn) != 0 && strlen($pwwd) != 0 && !empty($post)) {
$usrn = stripslashes($usrn);
$pwwd = stripslashes($pwwd);
$hashFormat = '$2ysomenumber$';
$salt = 'somehashobviously';
$hashF_and_salt = $hashFormat.$salt;
$pwwd = crypt($pwwd, $hashF_and_salt);
if (!mysqli_connect_errno()) {
mysqli_select_db($connected, 'someDbname') or die('Database select error');
} else {
die('Failed to connect to PHPMyAdmin').mysqli_connect_error();
}
$query = "SELECT Username, Password FROM users WHERE Username=? AND Password=?";
$stmt = mysqli_stmt_init($connected);
if (mysqli_stmt_prepare($stmt, $query)) {
//Some error in here somewhere
mysqli_stmt_bind_param($stmt, "ss", $usrn, $pwwd);
mysqli_stmt_execute($stmt);
mysqli_stmt_fetch($stmt);
mysqli_stmt_bind_result($stmt, $check_usrn, $check_pwd);
if (strcasecmp($usrn, $check_usrn) == 0) {
if ($pwwd == $check_pwd) {
echo '<h1 class="text-center">Matches</h1>';
print_r($row);
}
} else {
echo "<h1 class=text-center>We're sorry we can't log you in.</h1>";
}
}
} else { //This is for strlen boolean cond
echo "<h1 class='text-center'>Both fields must not be empty. </h1>";
}
私が働いていたプリペアドステートメントなしでログイン・ページを使用するために使用されるが、私は、私はより良いセキュリティのためにこれを行う必要があり実現。私のデータベースは正常に動作しているので、問題はどこにあるのですか? "//ここで何らかのエラーが発生しました"。
私は比較的新しいPHPプログラマーですが、まだ初年度の学生であり、休暇中に新しいことを試みています!オープンな私はすべての助けを読むだろう、ありがとう!
に警告セクションを参照してください;'、あなたはあなたのコードに問題が表示されます。 – Ibu
My $ check_usrnと$ check_passは、私が行ったことから間違いなくNULL値です。今はどうすればNULL値ではなく、データベースでチェックされる値であるように修正するのですか? –