PHP 와 MySQL을 이용한 로그인 스크립트
본문 바로가기
IT/PHP

PHP 와 MySQL을 이용한 로그인 스크립트

by SageIN 2023. 1. 24.
반응형

암호화된 비밀번호로 로그인하기

사용자이름을 쿼리에 바인딩하여 SQL 주입공격을 방지하기 위해 준비된 명령문을  사용합니다. 데이터베이스에 일반 텍스트 비밀번호를 저장하는 대신 password_hash ( ) 함수를 사용하여 데이터베이스에 비밀번호를 저장하기 전에 암호를 해시합니다. 그런 다음 password_verify ( ) 함수를 사용하여 입력 한 비밀번호가 데이터베이스에 저장된 해시 비밀번호와 일치하는지 확인합니다.

 

bcrypt와 같은 안전한 암호 해싱 알고리즘을 사용하고 각 암호에 고유 한 소금을 사용하는 것도 중요합니다. 또한 암호 해싱의 기본 알고리즘으로 Argon2 알고리즘을 포함하는 최신 버전의 PHP를 항상 사용해야합니다. PHP의 내장 암호 함수와 같은 라이브러리 또는 bcrypt, scrypt 또는 Argon2와 같은 라이브러리를 사용하여 자체 구현을 롤링하는 대신 암호 해싱 및 유효성 검사를 처리하는 것이 좋습니다.

예제코드

<?php
session_start();

$conn = new mysqli("localhost", "username", "password", "database");

if (isset($_POST["username"]) && isset($_POST["password"])) {
  $username = $_POST["username"];
  $password = $_POST["password"];
  
  $stmt = $conn->prepare("SELECT * FROM users WHERE username = ? LIMIT 1");
  $stmt->bind_param("s", $username);
  $stmt->execute();
  $result = $stmt->get_result();
  $user = $result->fetch_assoc();
  
  if ($user) {
    if (password_verify($password, $user['password'])) {
      $_SESSION["username"] = $username;
      header("Location: dashboard.php");
    } else {
      echo "Invalid username or password";
    }
  } else {
    echo "Invalid username or password";
  }
}
?>

<form action="login.php" method="post">
  <label for="username">Username:</label>
  <input type="text" id="username" name="username" required>
  
  <label for="password">Password:</label>
  <input type="password" id="password" name="password" required>
  
  <input type="submit" value="Login">
</form>
 
반응형

댓글


TOP

Designed by 티스토리