MOYOMOYO
모요 · PERSONAL BLOG

MOYO

생각과 경험을 기록하는 공간입니다.

← 글 목록

[php] 로그인 시도 5번 실패 시 IP차단 방법

모요조회 6댓글 0

로그인 페이지 구성 시, 무차별 대입 공격을 막기 위하여 5번의 시도 시 ip를 블럭하는 방법이다.

로그인 시도 한 ip를 특정 테이블에 기록하고 1시간 내에 5번의 실패 시 해당 ip를 블록 테이블에 저장한다.

<?php
// MySQL 연결 정보
$servername = "localhost";
$username = "username";
$password = "password";
$database = "database";

// 사용자 IP 주소 가져오기
$ip_address = $_SERVER['REMOTE_ADDR'];

// MySQL 연결
$conn = new mysqli($servername, $username, $password, $database);

// 연결 오류 확인
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 사용자 로그인 시도를 로그테이블에 기록
$sql = "INSERT INTO login_attempts (ip_address) VALUES ('$ip_address')";
$conn->query($sql);

// 마지막 1시간 동안 사용자의 로그인 시도 횟수 가져오기
$sql = "SELECT COUNT(*) AS attempt_count FROM login_attempts WHERE ip_address = '$ip_address' AND login_time > DATE_SUB(NOW(), INTERVAL 1 HOUR)";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$attempt_count = $row["attempt_count"];

// 로그인 시도 횟수가 5번 이상이면 IP를 차단
if ($attempt_count >= 5) {
    $sql = "INSERT INTO blocked_ips (ip_address) VALUES ('$ip_address')";
    $conn->query($sql);
    echo "IP 주소가 차단되었습니다.";
} else {
    echo "로그인 시도: $attempt_count";
}

// MySQL 연결 종료
$conn->close();
?>

로그인 페이지에는 아래 코드를 참고해서 블록 테이블에서 차단된 ip를 읽어와서 실제로 차단하는 소스코딩을 해야한다.

<?php
// MySQL 연결 정보
$servername = "localhost";
$username = "username";
$password = "password";
$database = "database";

// 사용자 IP 주소 가져오기
$ip_address = $_SERVER['REMOTE_ADDR'];

// MySQL 연결
$conn = new mysqli($servername, $username, $password, $database);

// 연결 오류 확인
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 차단된 IP 주소 목록 가져오기
$sql = "SELECT * FROM blocked_ips WHERE ip_address = '$ip_address'";
$result = $conn->query($sql);

// 차단된 IP 주소인 경우 접속 차단
if ($result->num_rows > 0) {
    die("접속이 차단되었습니다.");
}

// MySQL 연결 종료
$conn->close();
?>

#php #소스코드

로그인 후 좋아요

댓글 0

등록된 댓글이 없습니다.