로그인 양식을 MySQL 데이터베이스에 연결할 수 없습니다
이 문의는 MySQL 데이터베이스를 확인하는 사용자 로그인 기능 구현과 관련이 있습니다. 사용자는 데이터베이스에 저장된 자격 증명과 비교하여 유효성을 검사해야 하는 사용자 이름과 비밀번호를 입력할 것으로 예상합니다. 안타깝게도 양식은 오류 없이 제출되지만 원하는 기능은 달성되지 않습니다.
이 문제의 근본 원인은 SQL 주입 공격에 대한 보호가 부족하고 안전하지 않은 데 있습니다. 데이터베이스에 일반 텍스트로 비밀번호를 저장합니다. 이러한 문제를 해결하려면 다음을 수행하는 것이 좋습니다.
Register.php:
<code class="php">// Replace previous code with the following: session_start(); if (isset($_SESSION['userid'])) { // Redirect to safe page } if (isset($_POST['register'])) { $email = $_POST['email']; $password = $_POST['password']; // Cleartext password from user // New code for password hashing $hashed_password = password_hash($password, PASSWORD_DEFAULT); // Database connection and query $host = "localhost"; $dbname = "database_name"; $user = "username"; $pass = "password"; try { $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("INSERT INTO user_accounts (email, password) VALUES (?, ?)"); $stmt->execute([$email, $hashed_password]); // Redirect to login page $conn = null; } catch (PDOException $e) { throw $e; } }</code>
Login.php:
<code class="php">// Replace previous code with the following: session_start(); if (isset($_SESSION['userid'])) { // Redirect to safe page } if (isset($_POST['login'])) { $email = $_POST['email']; $password = $_POST['password']; // Cleartext password from user // Database connection and query $host = "localhost"; $dbname = "database_name"; $user = "username"; $pass = "password"; try { $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Get hashed password from database $stmt = $conn->prepare("SELECT password FROM user_accounts WHERE email = ?"); $stmt->execute([$email]); $hashed_db_password = $stmt->fetchColumn(); if (password_verify($password, $hashed_db_password)) { // User authenticated successfully $_SESSION['userid'] = true; // Redirect to safe page } else { // Authentication failed } $conn = null; } catch (PDOException $e) { throw $e; } }</code>
이러한 코드 수정을 통해 이제 사용자 로그인은 MySQL 데이터베이스와 안전하게 상호 작용하여 올바르게 작동해야 합니다. SQL 인젝션 공격과 사용자 비밀번호 유출.
위 내용은 내 로그인 양식이 내 MySQL 데이터베이스에 연결되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!