[PHP] 개인정보(문자열) 마스킹 처리

 

  • 문제점 : 서비스 내 마스킹 처리 부재로 개인정보가 노출 위험성이 존재
  • 해결방안 : 개인정보, 사용자 식별 정보 등 중요한 값은 노출되지 않도록 해야 한다. 부득이하게 중요한 값이 포함되어야 한다면 마스킹 혹은 암호화를 하여야 한다.

 

 1. preg_replace 정규식 이용 치환 함수

function maksing($name){
	// 뒤에 두글자 *로 마스킹
	$fnl = preg_replace('/.(?!..)/u', '*', $name);
    
    
	return $fnl;
}

"McDonald"  > "McDona**"

"감자" > "**"

"홍길동" > "홍**"

"아이스크림" > "아이스**"

 

 2. substr_replace 문자열 치환 함수

function masking($name){
	//index 3번 문자부터 3바이트 문자 *로 변경
	$fin = substr_replace($name, "*", 3, 3);

	return $fin;
}

substr_replace("문자열", "변경할 문자", 시작 인덱스, 길이);

 

substr_replace는 바이트를 기준으로 하기 때문에 아래처럼 영어와 한글이 다르게 적용된다.

 

시작인덱스 3, 길이 3인 경우

 

"McDonald"  > "McD*ld"

"감자" > "감*"

"홍길동" > "홍*동"

"아이스크림" > "아*스크림"

 

 

 3. for문으로 '*' 찍기

function masking($name){
    $len = mb_strlen($name, 'utf-8');
    
    $front = mb_substr($name, 0, 1, 'utf-8');
    
    if($len <= 2){
    	return $front.'*';
    }
    
    $back = mb_substr($name, $len-1, 1, 'utf-8');
    
    $for($i=1; $i<$len-1; $i++){
    	$front .= '*';
    }
    
    return $front.$back;
}

이 방법을 제일 자주 사용하는 것 같다. 

 

"McDonald"  > "M******d"

"감자" > "감*"

"홍길동" > "홍*동"

"아이스크림" > "아***림"