사이트 내 전체검색
그누보드
지속적으로 비번이 틀리는 ip를 블럭하기 (08.10.15)
로빈아빠
https://cmd.kr/gnu/548 URL이 복사되었습니다.

본문

지속적으로 비번이 틀리는 ip를 블럭하기 (08.10.15)
btn_scrap.gif
 글쓴이 : 아빠불당 (125.♡.174.92)
icon_view.gif 조회 : 781  icon_good.gif 추천 : 4  
  icon_file.gif singo_intercept.php (1.3K) [19] DATE : 2008-10-14 14:32:31
  icon_file.gif login_fail_list.php (5.7K) [13] DATE : 2008-10-15 13:33:40
관리자 페이지 login_fail_list.php 에 접속을 하면 접속로그 삭제일자이전의 로그인 오류
건수를 삭제합니다. 두개를 맞춰서 삭제하기 한 것은 로그인 기록과 대조를 해야할 때가
있을 수 있기 때문 입니다.

그리고, ip를 누르면 해당 ip로 검색이 되게 링크를 추가햇습니다.

/adm/login_fail_list.php를 다시 받으면 됩니다

--
누군가 비밀번호 해킹을 위해서 아이디를 바꾸면서 비밀번호를 입력하고 있다면???
/bbs/login_check을 보면 알겠지만 현재로는 이러한 공격에 대한 대응이 안됩니다.

회원 로그인 비밀번호가 틀릴 경우 db에 id, ip, 날짜를 넣어 둡니다.

CREATE TABLE `g4_login_fail_log` (
`log_id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`mb_id` VARCHAR( 255 ) NOT NULL ,
`ip_addr` VARCHAR( 255 ) NOT NULL ,
`log_datetime` DATETIME NOT NULL ,
`log_url` VARCHAR( 255 ) NOT NULL
)

config.php에서

// 로그인 retry
$g4['login_fail_log_table']     = $g4['table_prefix'] . "login_fail_log";     // 로그인 오류 logging

지정된 기간(예. 60sec, cf_retry_time_interval)동안 동일 ip에서 지정된 횟수(예: 10회, cf_retry_count)를
초과하는 경우에는 해당 ip를 block 합니다. ip를 바꾸면서 가끔씩 try 해서 오류가 생기는 경우에는
본인이 패스워드를 잊어버려서 그럴 수도 있으므로 블럭하지는 않습니다.

ALTER TABLE `g4_config` ADD `cf_retry_time_interval` INT( 11 ) NOT NULL ,
ADD `cf_retry_count` INT( 11 ) NOT NULL ;

/adm/config_form.php

<tr class='ht'>
    <td>아이디 Retry Interval</td>
    <td>
    <input type=text class=ed name='cf_retry_time_interval' value='<?=$config[cf_retry_time_interval]?>' size=5> 초
        <?=help("지정된 시간동안 아이디/비번의 오류가 발생하는 횟수를 count 하여, 그 횟수가 과도한 경우 해킹으로 간주 합니다.")?>
    </td>
    <td>아이디 Retry 횟수</td>
    <td>
    <input type=text class=ed name='cf_retry_count' value='<?=$config[cf_retry_count]?>' size=5> 회
        <?=help("지정된 시간동안 아이디/비번의 오류가 발생하는 횟수를 count 하여, 그 횟수가 과도한 경우 해킹으로 간주 합니다.")?>
    </td>
</tr>

/adm/config_form_update.php

                cf_retry_time_interval  = '$cf_retry_time_interval',
                cf_retry_count          = '$cf_retry_count',

/bbs/login_check.php ...

if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) {
    // 로그인 오류를 db에 기록 합니다.
    $sql = " insert into $g4[login_fail_log_table] (mb_id, ip_addr, log_datetime, log_url) values ('$mb_id', '$_SERVER[REMOTE_ADDR]', '$g4[time_ymdhis]', '/bbs/login_check.php') ";
    sql_query($sql);

   
    // 오류 횟수를 체크해서 차단할지를 결정 합니다.
    if ($config['cf_retry_time_interval'] > 0 && $config['cf_retry_count']) {
        $sql = " select count(*) as cnt from $g4[login_fail_log_table] where log_datetime >= " . date("Y-m-d H:i:s", $g4[server_time] - $config['cf_retry_time_interval']);
        $result = sql_fetch($sql);
       
        $ip = $_SERVER[REMOTE_ADDR];
        if ($result['cnt'] >= $config['cf_retry_count']) {
            $pattern = explode("\n", trim($config['cf_intercept_ip']));
            if (empty($pattern[0])) // ip 차단목록이 비어 있을 때
                $cf_intercept_ip = $ip;
            else
                $cf_intercept_ip = trim($config['cf_intercept_ip'])."\n{$ip}";
            $sql = " update {$g4['config_table']} set cf_intercept_ip = '$cf_intercept_ip' ";
            sql_query($sql);
        }
    }

    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
}

/adm/admin.menu_200.php에서

    array("200103", "로그인오류보기", "$g4[admin_path]/login_fail_list.php"),

/adm/login_fail_list.php, /adm/singo_intercept.php(수정본)을 업로드 합니다.



이렇게 해두면 나쁜 xx들의 공격을 수동 또는 자동으로 유용하게 대응할 수 있습니다.

댓글목록

등록된 댓글이 없습니다.

그누보드
190 (3/4P)

Search

Copyright © Cmd 명령어 18.220.97.161