84번 포트 서버에만 있는 줄 알았던 쿠키 토큰 에러가 81번 서버에도 뜹니다. 블록

도저히 원인을 찾질 못하겠네요. 어떤 서비스거부공격은 맞는 것 같은데 이 서비스거부공격에도 여러 종류가 있어서 해커가 어떤 방법을 사용하는지 모르겠네요. 

제 제로보드4 오픈소스 게시판 수정증보판 _head.php 파일 294행을 아래와 같이 수정했는데 이게 문제를 일으키고 있습니다. 제가 도저히 원인을 찾지 못해 배포하기 전 소스를 공개합니다.

그 다음 그 밑에 로그인 했을 때의 처리 루틴인 login_check.php 파일 37행 부분도 잘 살펴보시기 바랍니다. 이상 두 부분이 로그인 후 쿠키 토큰 에러메시지 처리 관련 루틴인데 이건 동일 IP나 맥어드레스 검사가 아니라서 사실 처리하지 않아도 되는 로직이지만 제가 소스 수정 도중에 만난 문제점이라 이상해서 어떤 방식으로 이런 문제점이 동작하는지 알고자 하는 것이니 힌트를 알고 계신 분은 도움 부탁드립니다. 아무래도 아파치 로그를 봐서는 무슨 문제인지 몰라서 이렇게 포스트를 작성했습니다.

[_head.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if(!$member[no]) {
    //토큰 초기화
    $_token='';
    session_register("_token");
    setCookie("token","",0,"/","");
 
    $a_login="<a onfocus=blur() href='".$_zb_url."login.php?$href$sort&s_url=$s_url'>";
    $a_logout="<Zeroboard ";
    $a_member_modify="<Zeroboard ";
    $a_member_memo="<Zeroboard ";
else {
 
    if($member[no]&&$_token!=$_COOKIE['token']) Error("세션 하이재킹은 허용되지 않습니다.<br>세션이 해킹되어 해커가 로그인을 시도하고 있으니 브라우저의 쿠키를 지우고 재접속 바랍니다.<br>그 다음 해커가 계정을 사용하기 전에 즉시 비밀번호를 바꿔야 합니다!");
 
    $a_login="<Zeroboard ";
    $a_logout="<a onfocus=blur() href='".$_zb_url."logout.php?$href$sort&s_url=$s_url'>";
    if($member[user_id]!="sprdrg") {
    $a_member_modify="<a onfocus=blur() href=# onclick=\"window.open('".$_zb_url."member_modify.php?group_no=$member[group_no]','zbMemberModify','width=560,height=590,toolbars=no,resizable=yes,scrollbars=yes')\">";
    } else $a_member_modify="<Zeroboard ";
    $a_member_memo="<a onfocus=blur() href=\"javascript:void(window.open('".$_zb_url."member_memo.php','member_memo','width=450,height=500,status=no,toolbar=no,resizable=yes,scrollbars=yes'))\">";
}
?>

[login_check.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
// 회원로그인이 성공하였을 경우 세션을 생성하고 페이지를 이동함
if($member_data[no]) {
 
    //토큰 초기화
    $_token2='';
    session_register("_token2");
    setCookie("token2","",0,"/","");
 
    if($auto_login) {
        makeZBSessionID($member_data[no]);
    }
 
    // 랜덤한 세 숫자를 발생(각1000-9999까지) 후 토큰변수에 대입
    $num1 = rand(1000,9999);
    $num2 = rand(1000,9999);
    $num3 = rand(1000,9999);
    $num123 = $num1.$num2.$num3;
 
    //로그인시 토큰 생성
    setCookie("token","$num123",0,"/","");
    $_token = "$num123";
 
    session_register("_token");
 
    // 4.0x 용 세션 처리
    $zb_logged_no = $member_data[no];
    $zb_logged_time = time();
    $zb_logged_ip = $REMOTE_ADDR;
    $zb_last_connect_check = '0';
 
    session_register("zb_logged_no");
    session_register("zb_logged_time");
    session_register("zb_logged_ip");
    session_register("zb_last_connect_check");
 
    // 로그인 후 페이지 이동
    $s_url=urldecode($s_url);
    if(!$s_url&&$id$s_url="zboard.php?id=$id";
    if($s_url) movepage($s_url);
    elseif($id) movepage("zboard.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&sm=$sm&keyword=$keyword&category=$category&no=$no");
    elseif($group[join_return_url]) movepage($group[join_return_url]);
    elseif($referer) movepage($referer);
    else echo "<script>history.go(-2);</script>";
 
// 회원로그인이 실패하였을 경우 에러 표시
else {
    head();
    Error("로그인을 실패하였습니다");
    foot();
}
?>

[로그인 후 얼마있다 다음과 같이 에러 메시지가 출력됩니다.]

덧글

  • 글리 2014/10/08 02:19 # 답글

    PHP 관리 기술도 없고 보안 로그도 다뤄본 적이 없는 분이 뭔 깡으로 이런 식으로 글을 올리시는지 모르겠네. 누구랑 대화하신다고 생각하고 이렇게 올리세요? 304도 완전히 반대로 생각하시고 계시던데 님이 올린 로그에 304가 찍힌건 별 의미없는 정상로그고요. 구글봇으로 200이 찍힌건 님이 말하고 있는 증상을 유발할 가능성이 있기야 있습니다. 이게 문제가 된다면 클라에서 쿠키를 맘대로 위조하도록 서버가 허용했다는 것외에 다른 어떤 보안문제도 우선할 수가 없겠구요. 그렇다면 PHP 5.2.x 이상일시 session.cookie_httponly 설정이 가능하니 이렇게 구닥다리 걱정을 할 필요도 없겠지만 구버전PHP라면 이게 설정이 불가능하니 구글봇이 접근못하도록 UA 검색 로직을 더해 차단하던지 리다이렉팅하던지 요령껏 처리하는 수 밖에 없겠지요????

    PHP문법을 그럭저럭 소화한 영역조차 아니신건 이글의 질문 구성에서도 뻔하게 보이는데요. 앞으로도 이런식으로 질문하실거면 어차피 PHP관련커뮤에 올려도 구버전잡고 끙끙되줄 사람 당연 없을테고 백에 구구는 혼잣말일텐데 그냥 포기하세요. 네이버카페나 다음카페 쓰시는걸 추천드립니다.
  • 희망의빛™ 2014/10/08 07:04 #

    방금 session.cookie_httponly 설정이 있어 On 으로 바꾸고 apache2를 재시작 했는데 로그인 후에 얼마있다 여전히 에러 메시지가 뜨는데요? 다른 문제인것 같아 보입니다.
  • 글리 2014/10/08 07:59 #

    보안계층적으로 접근해야 되는 문제를 어찌 다른 문제인것 같아 보인다고 말을 짧게 하고 끝낼실까? 그 정도 지식이면 그냥 네이버카페나 다음카페쓰세요. 포기하신듯한데 그럼 마저 포기하시길.
  • 희망의빛™ 2014/10/10 06:00 #

    이게 제 소스에서 인증할 때 브라우저 쿠키를 사용하고 있기 때문에 그 세션 설정을 건드리면 안됩니다. ^^; 동일 도메인 다른 포트에 할당되는 브라우저 쿠키값이 동일하기 때문에 발생하는 문제인 것으로 보입니다.
  • Kalaheim 2014/10/08 08:26 # 답글

    A problem has been detected and Windows has been shut down to prevent damage to the computer. Technical information: *** STOP: 0x00000050 (0xeb7ff002, 0x00000000, 0x8054af32, 0x00000001) PAGE_FAULT_IN_NONPAGED_AREA nt!ExFreePoolWithTag+237
  • 희망의빛™ 2016/04/24 19:26 # 답글

    이 문제는 같은 도메인 다른 포트 서버를 사용함으로써 발생하는 문제로 포트가 달라도 쿠키를 셋트하는 과정에서 도메인이 동일한 상황에선 한쪽에서 로그인 뒤 다른 쪽 서버에서 로그인을 다시 하면 갱신된 쿠키가 서로 다른 서버에서 클라이언트 브라우저 측 같은 장소의 setCookie 변수에 셋트되면서 발생합니다. 즉 서로 다른 포트의 서버에 로그인시 마다 갱신 발급되는 쿠키가 클라이언트 컴퓨터의 브라우저 쿠키에 동일하게 변경 저장되면서 발생하는 문제입니다. 이 문제는 쿠키를 셋트하는 setCookie 인자 변수명을 다른 포트의 서버 소스에서 서로 다르게 프로그래밍해 사용하면 문제를 해결할 수 있습니다. 이렇게 하면 같은 도메인 다른 포트의 서버라고 하더라도 로그인시 마다 서로 다른 쿠키가 브라우저에 저장되게 되지요.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


웹로그 검색