반응형
login_check.php에 로그인 실패 시도를 5회 이상 했을 경우 1시간 동안 계정을 잠그는 기능을 추가
1. 로그인 시도 기록 테이블 추가
로그인 시도 횟수를 기록할 별도의 테이블을 생성합니다.
CREATE TABLE `g5_login_attempts` (
`user_id` VARCHAR(255) NOT NULL,
`attempts` INT(11) NOT NULL DEFAULT 0,
`last_attempt` DATETIME NOT NULL,
PRIMARY KEY (`user_id`)
);
2. login_check.php 수정
<?php
include_once('./_common.php');
$g5['title'] = "로그인 검사";
$mb_id = isset($_POST['mb_id']) ? trim($_POST['mb_id']) : '';
$mb_password = isset($_POST['mb_password']) ? trim($_POST['mb_password']) : '';
run_event('member_login_check_before', $mb_id);
if (!$mb_id || run_replace('check_empty_member_login_password', !$mb_password, $mb_id))
alert('회원아이디나 비밀번호가 공백이면 안됩니다.');
// 로그인 시도 기록 체크
$current_time = date('Y-m-d H:i:s');
$attempt_query = "SELECT * FROM g5_login_attempts WHERE user_id = '$mb_id'";
$attempt_result = sql_fetch($attempt_query);
if ($attempt_result) {
$last_attempt_time = strtotime($attempt_result['last_attempt']);
$current_time_time = strtotime($current_time);
// 실패 횟수 5회 이상이고 1시간이 지나지 않았다면 로그인 차단
if ($attempt_result['attempts'] >= 5 && ($current_time_time - $last_attempt_time) < 3600) {
alert('로그인 실패가 5회 이상 발생했습니다. 1시간 후에 다시 시도해주세요.');
exit;
}
// 실패 횟수 초기화
elseif ($attempt_result['attempts'] >= 5 && ($current_time_time - $last_attempt_time) > 3600) {
$reset_attempts_query = "UPDATE g5_login_attempts SET attempts = 0, last_attempt = '$current_time' WHERE user_id = '$mb_id'";
sql_query($reset_attempts_query);
}
} else {
// 첫 로그인 실패 시도 처리
$insert_attempt_query = "INSERT INTO g5_login_attempts (user_id, attempts, last_attempt) VALUES ('$mb_id', 1, '$current_time')";
sql_query($insert_attempt_query);
}
// 기존의 회원 정보를 가져옴
$mb = get_member($mb_id);
// 비밀번호 검증 실패 시도 증가 로직
if (! (isset($mb['mb_id']) && $mb['mb_id']) || !login_password_check($mb, $mb_password, $mb['mb_password'])) {
if ($attempt_result) {
$update_attempts_query = "UPDATE g5_login_attempts SET attempts = attempts + 1, last_attempt = '$current_time' WHERE user_id = '$mb_id'";
sql_query($update_attempts_query);
} else {
$insert_attempt_query = "INSERT INTO g5_login_attempts (user_id, attempts, last_attempt) VALUES ('$mb_id', 1, '$current_time')";
sql_query($insert_attempt_query);
}
alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
}
// 로그인 성공 시 실패 기록 초기화
$delete_attempts_query = "DELETE FROM g5_login_attempts WHERE user_id = '$mb_id'";
sql_query($delete_attempts_query);
// 기존의 로그인 성공 처리 로직 유지
goto_url($link);
반응형
'그누보드,영카트' 카테고리의 다른 글
그누보드 중복로그인 차단 (0) | 2024.09.27 |
---|---|
카페24 http 를 https 로 변경 리다이렉트 그누보드5 (1) | 2024.05.02 |
영카트 배송후 7일후 자동완료처리 (1) | 2024.01.28 |
영카트 무통장 미결제 24시간후 자동취소 처리 (1) | 2024.01.28 |
댓글