로그인 페이지 구성 시, 무차별 대입 공격을 막기 위하여 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 #소스코드

Author: 모요
댓글

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

*

©2024 MOYO Blog with DAON Consulting Co,LTD.

CONTACT US

We're not around right now. But you can send us an email and we'll get back to you, asap.

보내는 중입니다..

로그인하세요.

계정 내용을 잊으셨나요 ?