81번과 84번 포트에서 쿠키 인증 에러가 뜨는 원인을 찾았는데요... 이게 블록

이게 같은 도메인 서로 다른 포트의 웹서버를 운용할 때 한쪽에서 로그인을 하고 다른 쪽 서버에서 로그인 뒤 리로딩을 하면 이런 메시지가 뜨더라구요. IE에선 그런 증상이 없는데 크롬/파이어팍스/오페라 에선 이런 현상이 있는 모양입니다. 아래 이미지로 켑쳐한 영문 페이지를 보시면 알겠지만 구글링을 해보아도 마땅한 해결책이 없던데 이거 혹시 아시는 분 계시나요? 이거 때문에 미치겠네요. 방법이 없으면 쿠키 토큰 인증 관련 루틴을 삭제해야할 것 같은데 그건 또 관리자 모드 인증 관련해서도 사용되기 때문에 삭제하기가 좀 그렇네요. 중간에 쉬기도 했지만 2주 가까이 이 문제 가지고 씨름하고 있습니다.

[84번 포트 중간값 찍은 화면]

[81번 포트 중간값 찍은 화면]

[_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
24
<?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>그 다음 해커가 계정을 사용하기 전에 
즉시 비밀번호를 바꿔야 합니다! 세션토큰: $_token, 브라우저토큰: ".$_COOKIE['token']);
echo "세션토큰: ".$_token." 브라우저토큰: ".$_COOKIE['token'];
    $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();
}
?>



모바일에서 소스가 잘 안보이시는 분은 http://bit.ly/1QdOvSj 를 클릭하세요.

덧글

  • 희망의빛™ 2014/10/09 20:23 # 답글

    이제 좀 실마리가 보이는데 브라우저 쿠키값을 어떻게 고유하게 만드느냐가 관건이 될 것 같습니다. ^^;
  • 글리 2014/10/09 22:52 # 답글

    저쯤 구글링하면 JSESSIONID 처리하는 테크닉도 검색이 안될 수가 없을텐데 이지점에 멈추시는 것도 참 용하시네. 마치 특정포트로 공격이 있어서 블록하고 대처할대로 했다듯이 적다가 서로 다른(인스턴스가 2개이상?)이라고 적는거보면 그냥 어이가 없네요? 재요청일시 당연히 클라이언트는 서버에 request하면 서버가 JSESSIONID를 발급해주는게 아니라 다시 response를 안해주니 그런거 아니겠서요? 이게 뭉개졌다면 뭉개지게한 IE8가 보안이 취약한거고 보안측면에서 크롬쪽이 옳은겁니다. 나중에라도 HTTP헤더에 대해서 배우시면 참 좋아보이는 내용의 향연인데 지금 당장은 뭐럴까 완전 공구리 가라 수준으로 이야기가 널이 뛰니 이런 글을 보고 반응하는 저도 초점없이 널을 뛰는군요.
  • 2014/10/09 22:51 # 삭제

    이쪽 개발 계통은 아니라 알아볼 생각을 안 했는데 관련자가 보기에도 어처구니가 없는 내용이라는거군요... 어이구야...
  • 글리 2014/10/09 22:57 #

    음// 글세요 배우는데 왕도는 없는거니까 그렇게까진 아니고... 상황을 파악하고 해결하기야 할듯하여 다행이긴 한데 참 묘한 분이시네요. 해킹이라고 수근수근해서 구경 왔었는데 이런 레벨의 문제면 솔까 관심없습니다.
  • Kalaheim 2014/10/10 06:46 # 답글

    Windows


    치명적인 오류 0E이(가) 0028:C178DC3E에서 발생하였습니다. 실행 중인 응용 프로그램이 종료됩니다.
    * 프로그램을 종료하려면 아무 키나 누르십시오.
    * 시스템을 다시 시작하려면 Ctrl+Alt+Del키를 누르십시오.
    실행 중인 프로그램의 저장하지 않은 정보는 손실됩니다.

    계속 진행하려면 아무 키나 누르십시오.
  • 희망의빛™ 2014/12/27 18:48 # 답글

    이 문제는 브라우저 쿠키 셋트할 때 인자 변수명을 서로 달리해서 해결했습니다. 원시적인 방법이지만 아주 잘 동작합니다.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


웹로그 검색