텔레그램함께 이야기하는 커뮤니티

오늘 방문자 1명

그누보드 회원가입 차단파일

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

/*
* ─────────────────────────────────────────────────────────────
* 회원가입 차단 (그누보드5 extend 파일)
* ─────────────────────────────────────────────────────────────
* 설치 : 이 파일을 그누보드 /extend/ 폴더에 업로드하면 바로 적용됩니다.
* 해제 : 파일을 삭제하거나, 아래 'enable' 을 false 로 바꾸세요.
*
* 차단 대상 (신규 가입 관련 페이지/처리 전부)
* - /bbs/register.php 약관 동의 페이지
* - /bbs/register_form.php 가입 입력 폼 (※ 회원정보 수정 w=u 는 허용)
* - /bbs/register_form_update.php 가입 처리(POST) (※ 회원정보 수정 w=u 는 허용)
* - /bbs/register_result.php 가입 완료 페이지
* - /bbs/register_email*.php 메일인증 관련 페이지 (옵션)
* - /plugin/social/register_member*.php 소셜 로그인 가입 (옵션)
*
* ※ 기존 회원의 로그인 / 회원정보 수정 / 관리자 페이지의 회원추가는 영향 없습니다.
*/
$REG_BLOCK = array(
'enable' => true, // true: 차단 / false: 해제
'message' => '현재 회원가입을 받지 않습니다.', // 안내 문구
'redirect' => '', // 이동할 주소 (비우면 메인 페이지)
'allow_ips' => array(), // 예외로 허용할 IP 예) array('123.123.123.123')
'social' => true, // 소셜 로그인 가입 페이지도 차단
'email_cert' => true, // 메일인증 페이지(register_email*.php)도 차단
'hide_links' => false, // true: 화면의 '회원가입' 링크도 숨김 (선택사항)
);

function _reg_block_run($o)
{
if (empty($o['enable'])) return;

$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
if (in_array($ip, (array)$o['allow_ips'], true)) return;

$script = str_replace('\\', '/', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : '');

// 1) 가입 관련 파일인지 판별
$is_form = preg_match('#/bbs/register_form(_update)?\.php$#', $script);
$is_target = $is_form
|| preg_match('#/bbs/register(_result)?\.php$#', $script)
|| (!empty($o['email_cert']) && preg_match('#/bbs/register_email(_update)?\.php$#', $script))
|| (!empty($o['social']) && preg_match('#/plugin/social/register_member(_update)?\.php$#', $script));

if ($is_target) {
// 로그인한 회원의 '정보 수정'(w=u)은 같은 파일을 쓰므로 허용
$w = isset($_POST['w']) ? $_POST['w'] : (isset($_GET['w']) ? $_GET['w'] : '');
if ($is_form && $w === 'u' && !empty($_SESSION['ss_mb_id'])) return;

$msg = $o['message'] ? $o['message'] : '회원가입이 차단되어 있습니다.';
$url = $o['redirect'] ? $o['redirect'] : (defined('G5_URL') ? G5_URL : '/');

if (!headers_sent()) {
http_response_code(403);
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: no-store');
}
echo '<!DOCTYPE html><html lang="ko"><head><meta charset="utf-8">'
. '<meta name="viewport" content="width=device-width,initial-scale=1"><title>회원가입 안내</title></head><body>'
. '<script>alert(' . json_encode($msg, JSON_UNESCAPED_UNICODE) . ');location.replace(' . json_encode($url) . ');</script>'
. '<noscript><p>' . htmlspecialchars($msg, ENT_QUOTES, 'UTF-8') . '</p>'
. '<p><a href="' . htmlspecialchars($url, ENT_QUOTES, 'UTF-8') . '">돌아가기</a></p></noscript>'
. '</body></html>';
exit;
}

// 2) (선택) 화면의 '회원가입' 링크 숨기기 - 일반 HTML 페이지에서만 동작
if (!empty($o['hide_links'])
&& (isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : '') === 'GET'
&& empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& in_array(basename($script), array('index.php', 'board.php', 'group.php', 'content.php', 'login.php', 'search.php'), true)
&& strpos($script, '/adm/') === false) {
ob_start(function ($html) {
$out = preg_replace('#<a\b[^>]*href=["\'][^"\']*/bbs/register\.php[^"\']*["\'][^>]*>.*?</a>#is', '', $html);
return $out === null ? $html : $out;
});
}
}
_reg_block_run($REG_BLOCK);
☰ 목록

댓글

답글 작성 중

댓글은 Telegram 로그인 후 작성할 수 있습니다. 내 댓글에 답글이 달리면 Telegram으로 알림이 전달됩니다.

첫 번째 댓글을 남겨보세요.