위에서 이상한 지시가 내려와서는 회원아이디 노출되는걸 랜덤 숫자로 나올수있게해서
아이디는 오로지 로그인할때만 사용되고 그외는 회원은 랜덤숫자로 아이디 노출을 막으라는걸
하라는데 개발자도아니고 -_-;; 업체다 의뢰하라니깐 그건또 싫다네요
나참!!!! 내서버 사용하면서 바라는것도많고 이거이거 고민고민해보다가 안되면
걍 돈주고 전문가한테 의뢰하라고 해야겠습니다. 단순히 업로드하고 다운로드만 할줄아는 사람한테 전문가 영역으로만드니까
답이없네요 저한테는 ㅠㅠ
댓글 9개
랜덤숫자보다는 회원가입일자로 숫자로 표현이 좋을듯 싶은데요
랜덤숫자로 할경우 체크를 한번해야 하기때문에 회원가입일자를 초로 환산하여 하면 될듯~
<?php
function generate10DigitId() {
// 마이크로초 기반 고유 숫자
$micro = microtime(true); // 예: 1695543620.123456
// 초 + 마이크로초를 합쳐서 정수로 변환
$raw = (int)($micro * 1000000); // 예: 1695543620123456
// 10자리로 압축: 마지막 10자리만 사용
$id = substr($raw, -10);
return $id;
}
echo "10자리 고유 가입 ID: " . generate10DigitId();
?>
10자리 고유 가입 ID: 3620123456
훅을 사용하는 그누보드5죠?
아래 전체를 복사하셔서,
extend 폴더에 아무파일을 하나 만드시고,
예를들어, member_id_mask.php
복사해서 붙여넣기 하시면 거의 다 바뀌지 않을까합니다.
간만에 코드 한번 올려보네요 ㅎㅎㅎ
<?php
if (!defined('_GNUBOARD_')) {
exit; // Exit if accessed directly
}
// 회원 아이디를 랜덤 6자리 숫자로 마스킹하는 함수
function mask_member_id($mb_id) {
if (empty($mb_id)) {
return $mb_id;
}
// 같은 아이디에 대해 항상 같은 랜덤 숫자를 반환하도록 시드 고정
$seed = crc32($mb_id);
mt_srand($seed);
// 6자리 랜덤 숫자 생성 (100000 ~ 999999)
$masked_id = mt_rand(100000, 999999);
return $masked_id;
}
// get_sideview 함수를 훅으로 가로채서 닉네임을 랜덤 숫자로 교체
add_replace('get_sideview', function($result, $mb_id, $name, $email, $homepage) {
// 회원이 아닌 경우 (비회원)는 그대로 반환
if (empty($mb_id)) {
return $result;
}
// 마스킹된 아이디 생성
$masked_id = mask_member_id($mb_id);
// 결과에서 원본 아이디를 마스킹된 아이디로 교체
$result = str_replace($mb_id, $masked_id, $result);
// 닉네임 부분도 마스킹된 아이디로 교체 (게시판에서 보이는 이름 부분)
if (!empty($name)) {
$result = str_replace($name, $masked_id, $result);
}
return $result;
}, 5, 4);
// member_sideview_items 훅으로 더 정확한 마스킹
add_replace('member_sideview_items', function($items, $args) {
if (isset($args['mb_id']) && !empty($args['mb_id'])) {
$masked_id = mask_member_id($args['mb_id']);
// name_tag 배열에서 아이디와 이름을 마스킹된 아이디로 교체
if (isset($items['name_tag']) && is_array($items['name_tag'])) {
foreach ($items['name_tag'] as $key => $tag) {
// 아이디 교체
if (strpos($tag, $args['mb_id']) !== false) {
$items['name_tag'][$key] = str_replace($args['mb_id'], $masked_id, $tag);
}
// 이름/닉네임 교체 (args에서 name이 전달되는 경우)
if (isset($args['name']) && !empty($args['name']) && strpos($tag, $args['name']) !== false) {
$items['name_tag'][$key] = str_replace($args['name'], $masked_id, $tag);
}
}
}
}
return $items;
}, 10, 2);
// 게시판 목록에서 직접 표시되는 이름/닉네임 마스킹
add_replace('conv_content', function($content) {
// 정규식으로 회원 정보가 포함된 HTML 패턴을 찾아서 마스킹
$content = preg_replace_callback(
'/(<[^>]*class="[^"]*sv_member[^"]*"[^>]*>)([^<]+)(<\/[^>]*>)/',
function($matches) {
// HTML 태그는 그대로 두고 내용만 마스킹
$masked_content = mask_member_id($matches[2]);
return $matches[1] . $masked_content . $matches[3];
},
$content
);
return $content;
}, 5, 1);
게시글 목록
| 번호 | 제목 |
|---|---|
| 1717252 | |
| 1717247 | |
| 1717243 | |
| 1717237 | |
| 1717225 | |
| 1717214 | |
| 1717208 | |
| 1717203 | |
| 1717189 | |
| 1717183 | |
| 1717177 | |
| 1717172 | |
| 1717163 | |
| 1717162 | |
| 1717156 | |
| 1717154 | |
| 1717153 | |
| 1717141 | |
| 1717140 | |
| 1717138 | |
| 1717113 | |
| 1717111 | |
| 1717105 | |
| 1717099 | |
| 1717085 | |
| 1717076 | |
| 1717072 | |
| 1717065 | |
| 1717062 | |
| 1717050 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기