그누보드 게시판 내 개인정보(이름, 전화번호) 마스킹 처리 방법
페이지 정보

본문
그누보드 게시판 목록 및 본문에서 이름과 전화번호 일부를 별표(*) 또는 원문자(○)로 마스킹하여 개인정보 노출을 방지하는 PHP 코드 적용 방법과 예외 처리 설정을 안내합니다.
그누보드 게시판 이름 마스킹 처리 방법
그누보드 게시판 목록(list.skin.php)과 본문(view.skin.php)에서 한글 이름의 뒷자리나 중간 글자를 별표(*) 등으로 마스킹하여 개인정보 노출을 방지할 수 있습니다. 사용자의 PHP 버전 및 인코딩(UTF-8) 환경에 따라 함수 동작에 차이가 있을 수 있으므로 출력이 깨질 경우 substr 대신 mb_substr 함수를 사용하는 것이 권장됩니다.
1. 한글 이름 뒷자리 마스킹
맨 뒷자리 1자리 또는 2자리를*로 표시
substr을 사용하면 한글, 영문, 숫자 조합에서 출력이 깨질 수 있으므로 mb_substr을 사용합니다.
$list[$i]['name'] = mb_substr($list[$i]['wr_name'], 0, -2).'**';
- 자리수는
0, -2부분에서 적당히 조절할 수 있습니다.
*로 표시 (list.skin.php)
list.skin.php 파일에서 for ($i=0; $i<count($list); $i++) { 바로 아랫줄에 다음 코드를 추가합니다.
if (!$is_admin && $list[$i]['mb_id']!= 'admin') {
$list[$i]['name'] = substr($list[$i]['wr_name'],0,-3)."*";
}
본문(view.skin.php) 적용
view.skin.php 파일에서는 출력부를 수정하거나 상단에 예외 조건을 포함하여 적용합니다.
<?php echo substr($view['wr_name'],0,-3)."*";?>
관리자로 로그인했을 때 풀 네임으로 보이게 하려면 view.skin.php 상단에 아래 내용을 적용합니다.
if (!$is_admin && $view['mb_id']!= 'admin') {
$view['name'] = substr($view['wr_name'],0,-3)."*";
}
첫 글자만 보이고 나머지 글자 별표 처리
list.skin.php 파일의 for 문 바로 아랫줄에 추가합니다.
if (!$is_admin && $list[$i]['mb_id']!= 'admin') {
$list[$i]['name'] = preg_replace('/(?<=.{1})./u','*',$list[$i]['wr_name']);
}
2. 한글 이름 중간 글자 마스킹
중간 한자리를○으로 숨기기
원하는 자리를 지정하여 전체 글자 수를 조절할 수 있습니다. list.skin.php 파일의 for 문 바로 아랫줄에 추가합니다.
if (!$is_admin && $list[$i]['mb_id']!= 'admin') {
$name_x ='○';
$name_a = mb_substr($list[$i]['wr_name'],0,1,"UTF-8");
$name_b = mb_substr($list[$i]['wr_name'],2,10,"UTF-8");
$list[$i]['name'] = $name_a.$name_x.$name_b;
}
정규식을 이용하는 간단한 방법은 다음과 같습니다.
if (!$is_admin && $list[$i]['mb_id']!= 'admin') {
$list[$i]['name'] = preg_replace("/(^.)./u", "$1○", $list[$i]['wr_name']);
}
3. 관리자 및 본인 작성글 마스킹 예외 처리
기본 코드에 사용된 !$is_admin && $list[$i]['mb_id']!= 'admin' 조건은 관리자가 작성한 글을 별표 처리에서 제외합니다. 작성한 본인 글까지 제외하려면 조건문을 아래와 같이 수정합니다.
- 관리자 및 본인 글 모두 제외할 때:
if (!$is_admin && $list[$i]['mb_id']!= 'admin' && $list[$i]['mb_id']!= $member['mb_id']) {
- 본인 글만 제외할 때:
if (!$is_admin && $list[$i]['mb_id']!= $member['mb_id']) {
4. 적용 후 확인 방법
- 관리자 로그인: 마스킹 처리가 해제되어 원본 이름이 정상적으로 노출되는지 확인합니다.
- 일반 회원 및 비회원 로그인: 설정한 조건에 따라 이름의 일부가
*또는○로 정상 마스킹되어 출력되는지 확인합니다.
그누보드 여분 필드 전화번호 마스킹 처리 방법
그누보드 게시판에서 여분 필드(wr_1 등)로 입력된 전화번호의 뒷자리나 중간 자리를 별표(*)로 숨기려면 게시판 스킨 파일(list.skin.php)의 목록 출력 반복문 내에 조건문과 문자열 변환 코드를 추가해야 한다.
1. 적용 위치 및 조건문
list.skin.php 파일에서 for ($i=0; $i<count($list); $i++) { 바로 아랫줄에 코드를 추가한다. 관리자나 특정 조건을 제외하고 일반 사용자 화면에서만 마스킹이 적용되도록 예외 처리 조건을 함께 묶어준다.
2. 전화번호 뒷자리 4자리를 ****로 표시하는 방법
전화번호가 010-1234-5678 형식으로 입력되었을 때 맨 뒤 4자리를 별표로 바꾸려면 아래 코드를 추가한다.
if (!$is_admin && $list[$i]['wr_1']) {
$list[$i]['wr_1'] = substr($list[$i]['wr_1'], 0, -4). "****";
}
3. 전화번호 중간 자리를 ****로 표시하는 방법
전화번호의 중간 부분을 별표로 숨기려면 정규식을 사용하는 아래 코드를 적용한다.
if (!$is_admin && $list[$i]['wr_1']) {
$list[$i]['wr_1'] = preg_replace('/-(\d+)-/e', "'-'.str_repeat('*', strlen('\\1')).'-'", $list[$i]['wr_1']);
}
4. 확인 및 주의사항
- 관리자로 로그인했을 때는 번호가 모두 그대로 노출되며, 그 이외의 상태(비회원 또는 일반 회원)일 때 연락처 중간이나 뒷자리가
****로 표시되는지 확인한다. - 사용자의 PHP 버전 및 인코딩 환경에 따라 함수 동작에 차이가 있을 수 있으므로 적용 후 화면 깨짐이나 출력 오류가 발생하는지 점검해야 한다.
그누보드 게시판에서 이름이나 연락처를 마스킹 처리할 때, 관리자나 작성자 본인에게는 마스킹을 적용하지 않고 전체 정보를 표시하려면 list.skin.php 파일 내 반복문(for 문) 안에서 조건문을 설정해야 합니다.
관리자 및 본인 제외 조건문
게시판 목록(list.skin.php)에서 마스킹 로직을 적용하기 전, 아래와 같이 관리자 여부($is_admin)와 회원 아이디($member['mb_id'])를 확인하는 조건문을 추가합니다.
if (!$is_admin && $list[$i]['mb_id']!= 'admin' && $list[$i]['mb_id']!= $member['mb_id']) {
// 마스킹 처리 로직 (예: mb_substr, preg_replace 등)
}
조건문 상세 설명
!$is_admin: 현재 접속자가 최고관리자가 아닐 때만 마스킹을 적용합니다.$list[$i]['mb_id']!= 'admin': 게시물 작성자가 관리자(admin)가 아닐 때만 마스킹을 적용합니다. (관리자 아이디가 다를 경우 해당 아이디로 수정)$list[$i]['mb_id']!= $member['mb_id']: 게시물 작성자가 현재 로그인한 회원 본인이 아닐 때만 마스킹을 적용합니다.
이 조건문을 사용하면 관리자이거나 글을 작성한 본인일 경우 마스킹 로직을 건너뛰어 원본 정보가 그대로 출력됩니다.
substr 함수 사용 시 한글 이름 깨짐 현상 해결 방법
그누보드 게시판 스킨에서 문자열 일부를 숨기거나 마스킹 처리할 때 substr 함수를 사용하면 한글과 영문, 숫자 조합 환경에서 바이트 단위 처리로 인해 출력이 깨질 수 있습니다.
확인 및 적용 위치
- 대상 파일:
list.skin.php,view.skin.php등의 게시판 스킨 파일 - 확인 방법: 이름 또는 텍스트 출력 부문에 적용된 문자열 함수 확인
해결 방법
- mb_substr 함수로 변경
substr대신 멀티바이트 문자열을 지원하는mb_substr로 변경하여 글자 단위로 정확히 처리합니다.- 예시 코드:
$list[$i]['name'] = mb_substr($list[$i]['wr_name'], 0, -2).'**';- 자리수(
0, -2부분)는 요구하는 마스킹 범위에 맞게 조절할 수 있습니다.
- 유니코드 정규식(u 모디파이어) 활용
preg_replace등을 사용할 때 정규식 뒤에/u옵션을 붙여 UTF-8 환경에서 유니코드 문자가 올바르게 인식되도록 처리합니다.- 예시 코드:
$list[$i]['name'] = preg_replace('/(?<=.{1})./u', '*', $list[$i]['wr_name']);
다음 행동 및 주의사항
- 사용자의 PHP 버전 및 UTF-8 인코딩 환경에 따라 함수 동작에 차이가 있을 수 있으므로, 코드를 수정한 뒤 일반 회원 및 관리자 계정으로 각각 로그인하여 이름이 깨지지 않고 마스킹이 정상적으로 반영되는지 확인합니다.
상황별 마스킹 처리 가이드
| 내 상황 | 우선할 판단 | 다음 행동 |
|---|---|---|
| 이름·연락처 마스킹 시 출력이 깨지거나 통째로 사라짐 | substr 함수가 멀티바이트(한글) 인코딩을 처리하지 못해 발생하는지 확인 | substr 대신 멀티바이트 전용 함수인 mb_substr을 사용하거나 정규식에 /u 유니코드 옵션을 적용 |
| 관리자 및 본인 작성 글에서도 마스킹이 적용되어 불편함 | 관리자 권한 및 로그인 회원 아이디 비교 조건문 누락 여부 확인 | if (!$is_admin && $list[$i]['mb_id']!= 'admin' && $list[$i]['mb_id']!= $member['mb_id']) 조건문으로 마스킹 로직을 감싸기 |
여분 필드(wr_1) 전화번호의 일부를 별표로 숨겨야 함 | 전화번호 저장 형식(010-1234-5678)과 뒤 4자리 혹은 중간 자리 마스킹 여부 결정 | list.skin.php의 for 문 아래에 substr 또는 정규식(.preg_replace)을 이용한 마스킹 코드 추가 |
실전 FAQ
Q. substr 대신 mb_substr을 써야 하는 이유는 무엇인가요?
- 예외 및 대안: 그누보드 게시판에서 한글 이름이나 텍스트를 자를 때
substr을 사용하면 바이트 단위로 처리되어 한글이 깨지거나 원하지 않는 결과가 출력될 수 있습니다. UTF-8 환경에서는 글자 단위를 정확히 인식하는mb_substr함수를 사용하는 것이 안전합니다.
Q. 관리자와 작성자 본인 모두 마스킹에서 제외하려면 조건문을 어떻게 작성해야 하나요?
- 실행 및 예외 처리:
list.skin.php파일의 반복문 내에 아래와 같이!$is_admin, 관리자 아이디 체크, 그리고 로그인한 본인 아이디 체크($member['mb_id'])를 동시에 포함해야 합니다.
if (!$is_admin && $list[$i]['mb_id']!= 'admin' && $list[$i]['mb_id']!= $member['mb_id']) {
// 마스킹 코드
}
함께 보면 좋은 글
- 그누보드 게시판 제목 특정 구간 마스킹 처리 방법과 구현 시 주의사항
- 그누보드 댓글 작성자 실명 마스킹 처리 방법과 작성자 표시 설정
- 그누보드5 회원가입 페이지 개인정보 수집 항목 최소화 및 간소화 가이드
참고자료
기타 참고자료
- 이전글그누보드5 게시판 및 최신글 스킨 날짜 출력 형식 변경 방법 26.09.26
- 다음글그누보드4 최고관리자 자동로그인 강제 활성화 방법과 주의사항 26.09.25
댓글목록
등록된 댓글이 없습니다.