메뉴 건너뛰기

infra

[ipin] 인증 우회나 변조 막기

suritam92013.12.02 05:10조회 수 2934댓글 0

  • 1
    • 글자 크기

아이핀 인증을 구현하면서 인증을 100회 정도는 테스트 한 것 같다.


ipin.jpg


세션 아이디와 virtualno, realname 을 저장해, 최종 가입시에, 세 가지 정보가 일치하는지 확인해서 그렇지 않을 경우 가입을 막아버린다.


입력 필드는, 실명이 존재하기 때문에, 실명을 변조할 가능성이 있기에, 마지막에 추가했다.


virtualno는 변하지 않은 값이라 추가했는데, 이외에, 생년월일, age 등이 있다. 근데, age가 난 7로 되어 있다. 뭐지?


암튼,


인증테이블에 올바른 인증일 때, 아래와 같이 넣고,


$sql="INSERT INTO `인증테이블` (`no`, `session_id`, `virtualno`, `realname`, `current`) VALUES ('', '".$_COOKIE["PHPSESSID"]."', '".$field[4]."', '".$field[6]."','".$current."');";


최종 확인에서


$sql="SELECT * FROM  `인증테이블` WHERE  `session_id` = '".$_COOKIE["PHPSESSID"]."' AND  `virtualno` = '".$_POST["virtualno"]."' AND `realname` = '".$_POST["user_name"]."'";

$Res = mysql_query($sql, $connect); 

$Row = mysql_fetch_row($Res);

if (!count($Row[0])) return -1;


로 검증한다. 인증한 세션, 고유번호, 실명이 일치하는 값이 없으면, 에러 처리한다.


[공식 설명]


1)  필수 등록 필드 설정 및 아이핀 인증시 리턴 값 저장

(virtualno 는 ipin 제공 업체에서 제공하는 고유 번호 이다.)

 

$sql="INSERT INTO `인증테이블` (`no`, `session_id`, `virtualno`, `realname`, `current`) VALUES ('', '".$_COOKIE["PHPSESSID"]."', '".$virtualno."', '".$실제이름."','".$인증시간."');";

 

2) 최종 가입 확인에서 인증시 저장했던 정보를 확인하여 실제 인증 받은 정보(인증 당시 세션이름, virtualno)가 일치하지 않으면 에러 처리

 

$sql="SELECT * FROM `인증테이블` WHERE `session_id` = '".$_COOKIE["PHPSESSID"]."' AND `virtualno` = '".$_POST["virtualno"]."' AND `realname` = '".$_POST["user_name"]."'";

$Res = mysql_query($sql, $connect);

$Row = mysql_fetch_row($Res);

$저장된시간 = $Row[4];

if (!count($Row[0])) return 1;

 

3) 옵션

 

인증 받은 후최종 가입에 도달하는 시간에 제한을 둘 수 있다.

 

if(time()-$저장된시간 < 600) return 1;

 

600(10안에 회원 가입 절차를 마무리 하지 않은 경우는 악의적인 접근으로 판단 할 수 있기 때문에해당 옵션을 사용할 수 있다회원 가입 절차가 복잡할 경우, 1200이나 1800 으로 상향 조정 가능하다.

 

4) 중복 가입 방지

 

회원 가입시에는 기존 멤버테이블에 아이핀 고유 식별 값(virtualno)을 저장해야 기존 회원의 중복 가입을 방지할 수 있다.아이핀 서비스 제공업체에서 인증 후기존 회원에 virtualno로 가입되어 있는 회원이 있으면해당 회원 id의 앞 3자리만 보여준다.

 

$sql="SELECT `user_id` FROM `멤버테이블` WHERE `virtualno 저장 필드` LIKE '%".$virtualno."%'";

$Res = mysql_query($sql, $connect);

$Row = mysql_fetch_row($Res);

if(count($Row[0])){

echo mask_id($Row[0])."로 가입되어 있습니다.";

echo "<br /><a href='#' onclick='self.close();'>[닫기]</a>";

}

function mask_id($str){

$str1=substr($str,0,3);

for($i=0;$i<strlen($str)-3;$i++){

$str2="*".$str2;

}

return $str1.$str2;

}

 

suritam9 (비회원)
  • 1
    • 글자 크기

댓글 달기

첨부 (1)
ipin.jpg
28.2KB / Download 77
위로