답변 6개
안녕하세요....
@더스펀지 님
먼저 궁극적으로 블랙캣77님 말씀대로 글쓴이 이름만 차단한다고 문제가 해결되지는 않습니다.
다만 원하시는 데로 질문에 대한 답변을 드리겠습니다.
먼저 사용하시는 게시판 스킨을 확인해주세요
그리고 나서 해당 스킨 폴더에 다음과 같은 파일을 만들어주세요
write_update.head.skin.php
그리고 아래 코드를 넣어주시면, 원하시는데로 됩니다.
</p>
<p><?php</p>
<p>if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가</p>
<p> </p>
<p>if (strpos($wr_name, 'test') !== false || $wr_name == 'aaa') {</p>
<p> alert('사용할 수 없는 이름입니다.');</p>
<p> exit;</p>
<p>}</p>
<p>
test 혹은 aaa 이름이 들어가있다면 거절됩니다.
예를 들어 test 뿐만 아니라 test1 test2 test3 도 마찬가지입니다.
작동 영상은 아래를 참고하세요
http://sir.kr/data/editor/2502/978180634_1739852012.76.gif" width="100%" />
댓글을 작성하려면 로그인이 필요합니다.
test 뿐만 아니라 test1 test2 test3 등의 닉네임을 막는 것은 단순한 해결책일 뿐이고,
본질적인 해결책은 IP 차단일 것입니다.
왜냐하면,
비회원 인지는 IP 이외에는 신뢰할 수 있는 정보가 없기 때문에 닉네임 차단은 의미 없으며.
닉네임을 변경하는 로직이 없는 스크립트 봇일 리 만무합니다. 닉네임 변경만 하면 다시 글을 쓸 수 있으므로 IP 차단이 가장 현실적인 해결책입니다.
특정 시간 내의 접근 빈도 제한을 하여, IP 차단을 하는 정도가 최선일 듯합니다.
※ 임시 방어라도 하시겠다면,
PHP에서 변형(대/소문자 띄어쓰기)된 닉네임 차단 + IP 관리를 병행하는 예시 코드.
bbs/write_update.php 파일에서 닉네임(wr_name)을 처리하는 아래 코드,
$g5['title'] = '게시글 저장';
직후에 다음의 예시 처럼 IP/닉네임을 추가/수정하여 커스텀하세요.
</p>
<p><?php
include_once('./_common.php');
include_once(G5_LIB_PATH.'/naver_syndi.lib.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');</p>
<p>// 토큰체크
check_write_token($bo_table);</p>
<p>$g5['title'] = '게시글 저장'; // == 여기까지는 기존 코드 ==</p>
<p>// ✅차단할 닉네임 목록 (소문자로 변환하여 저장)
$blocked_nicknames = array("test", "spamuser", "광고봇");</p>
<p>// ✅차단할 IP 목록
$blocked_ips = array("112.123.45.67", "203.456.78.90");</p>
<p>// 현재 접속한 사용자 IP 가져오기
$user_ip = $_SERVER['REMOTE_ADDR'];</p>
<p>// ✅ 1. IP 차단 로직 추가
if (in_array($user_ip, $blocked_ips)) {
die("해당 IP에서는 글쓰기가 제한됩니다.");
}</p>
<p>// ✅ 2. 닉네임 차단 로직 추가
if (isset($_POST['wr_name'])) {
$nickname = trim($_POST['wr_name']); // 앞뒤 공백 제거
$nickname_cleaned = preg_replace('/[^a-zA-Z0-9가-힣]/u', '', $nickname); // 특수문자 제거
$nickname_lower = mb_strtolower($nickname_cleaned, 'UTF-8'); // UTF-8 기반 소문자 변환</p>
<p> if (in_array($nickname_lower, $blocked_nicknames)) {
die("해당 닉네임은 사용할 수 없습니다.");
}
}</p>
<p>// ==여기서부터는 기존 코드 ==
$msg = array();
$uid = isset($_POST['uid']) ? preg_replace('/[^0-9]/', '', $_POST['uid']) : 0;</p>
<p>// 이후 기존 write_update.php 로직 유지</p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
비회원 글쓰기는 아이피외에는 방법이 없을 것입니다. 왜냐 하면 차단할 수 있는 인자가 아이피 외에는 전혀 없기 때문 입니다. 특정 단어나 닉네임을 제한 할 수도 있지만은 변경하면 그만이기 때문입니다. 너무 쉽게 회피 할 수 있어서 의미가 없어집니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인