BOARD

팁·활용

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

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 25회 작성일 26-09-26 15:44

본문

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

그누보드 게시판 목록 및 본문에서 이름과 전화번호 일부를 별표(*) 또는 원문자(○)로 마스킹하여 개인정보 노출을 방지하는 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 부분에서 적당히 조절할 수 있습니다.
뒷자리 1자리를 *로 표시 (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 등의 게시판 스킨 파일
  • 확인 방법: 이름 또는 텍스트 출력 부문에 적용된 문자열 함수 확인

해결 방법

  1. mb_substr 함수로 변경
    • substr 대신 멀티바이트 문자열을 지원하는 mb_substr로 변경하여 글자 단위로 정확히 처리합니다.
    • 예시 코드:
    $list[$i]['name'] = mb_substr($list[$i]['wr_name'], 0, -2).'**';
    • 자리수(0, -2 부분)는 요구하는 마스킹 범위에 맞게 조절할 수 있습니다.
  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']) {
 // 마스킹 코드
}

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.