일반 폼메일에 그누보드캡챠 도임하기

안녕하세요,

그누보드 5.x 를 사용하고 잇습니다. 그리고 일반 웹페이지에서 일반적인 폼메일을 작성햇습니다.
그리고 이 폼메일에 글쓰기에서 문자로 검증하는 그누보드캡챠를 도입하려면 어떻게 해야 할까요?
구글캡챠 도입방법은 어떻게 될까요?

댓글 주시는 분께 미리 감사올립니다~^^
|

답변 4개 / 댓글 3개

2026-10-21 (수) 23:36:10

직접 만드신 페이지에서도 그누보드의 common.php를 include 하고 있다면 캡챠 함수 세 개만 쓰시면 됩니다.

<?php
include_once('./_common.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
?>
<form onsubmit="return fmail_submit(this);" method="post" action="send.php">
    ...
    <?php echo captcha_html(); ?>
</form>
<script>
function fmail_submit(f) {
    <?php echo chk_captcha_js(); ?>
    return true;
}
</script>

받는 쪽(send.php)에서는 메일을 보내기 전에 아래처럼 서버 검증을 꼭 넣어 주세요. 이 부분이 없으면 자바스크립트를 우회해 스팸이 들어옵니다.

include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
if (!chk_captcha()) alert('자동등록방지 숫자가 틀렸습니다.');

구글 캡챠는 코드를 바꾸실 필요가 없습니다. 관리자 > 환경설정 > 기본환경설정에서 캡챠를 reCAPTCHA로 바꾸고 사이트 키·비밀 키를 넣으면, G5_CAPTCHA_PATH가 해당 플러그인 폴더를 가리키게 되어 위 코드가 그대로 동작합니다.

기존 답변에 적용 위치 두 곳을 보완합니다. 그누보드5 공식 소스를 AI로 확인한 내용이며, 작성하신 폼메일에서 직접 테스트한 결과는 아닙니다.

첫째, chk_captcha_js() 출력은 독립된 script 최상위에 넣지 말고 폼의 onsubmit에서 호출하는 함수 안에 넣어야 합니다. 기본 kcaptcha의 반환문이 if (!chk_captcha()) return false; 이기 때문입니다. 공식 skin/member/basic/formmail.skin.php도 fformmail_submit(f) 함수 내부에서 출력합니다. 기존 전송 함수가 있다면 그 함수의 메일 전송/Ajax 요청보다 앞에 넣고, 실패 시 전송을 중단하세요.

둘째, 화면 표시와 자바스크립트 검사만으로 끝내면 안 됩니다. 실제 메일 발송을 처리하는 PHP에서도 _common.php와 G5_CAPTCHA_PATH.'/captcha.lib.php'를 로드한 뒤, mailer()를 호출하기 전에 아래처럼 서버 검사를 해야 합니다.

Copy
if (!chk_captcha()) {
    alert('자동등록방지 문자가 올바르지 않습니다.');
}
// 이 검사를 통과한 다음 기존 발송 처리

공식 bbs/formmail_send.php가 이 순서입니다. 폼의 captcha_key 입력이 실제 POST에 포함되어야 하고, 캡차 화면과 발송 PHP가 같은 그누보드 세션을 사용하는 환경이어야 합니다. 별도 도메인·독립 서버의 폼이라면 위 include만 붙여서는 동작하지 않을 수 있습니다.

수신 주소는 서버에서 정한 주소나 허용 목록으로 제한하세요. 캡차를 추가해도 임의의 외부 수신자로 발송되는 구조가 안전해지는 것은 아닙니다. 설치된 캡차 플러그인이 기본 kcaptcha와 다르다면 해당 플러그인의 동작도 확인해야 합니다.

근거: 기본 폼의 onsubmit 검사 위치 / 메일 발송 전 PHP 검사 / 기본 캡차 함수 구현

답변에 대한 댓글 1개

소중한 가르침을 주셔서 너무 감사올립니다~ 제게는 정말로 많이 도움되었습니다~^^

그누보드 기본 캡차는 별도의 외부 키 발급 없이 그누보드 내부 함수만 호출해서 사용합니다.

호출 : captcha_html()

검증 : chk_captcha()

구글 캡차는 보안성과 클릭 한 번으로 인증되어 좋지만 구글 콘솔에서 도메인 별 키 발급과 서버측 cURL/file_get_contents 검증 코드가 추가로 필요하고 단계별로 정리하면 아래와 같습니다.
1. 구글 캡차를 도입하려면 먼저 Google reCAPTCHA Admin 사이트에서 사이트를 등록
2. 키(Site Key)와 비밀 키(Secret Key)를 발급
3. 체크박스 형태인 reCAPTCHA v2 "로봇이 아닙니다"형식으로 사용

답변에 대한 댓글 1개

소중한 가르침을 주셔서 너무 감사올립니다~ 제가 초보이다 보니 질문드리게 되었습니다~ 가르쳐주신대로 잘 실천하겠습니다~^^
기본 글쓰기 폼에서 캡차가 어떤식으로 적용이 되어있는지 분석부터 하세요 선생님. 폼메일 작성페이지에서 도 그대로 적용해주시면됩니다.
예를들어서
폼메일 작성 페이지에 다음과 같이 상단에 라이브러리 함수 추가
<?php
include_once('./_common.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');

$captcha_html = captcha_html();
$captcha_js = chk_captcha_js();
?>
다음 폼안에 캡챠 호출
<div class="write_div">
    <?php echo $captcha_html; ?>
</div>
그리고 하단에 스크립트 검증
<script>
<?php echo $captcha_js; ?>
</script>

답변에 대한 댓글 1개

소중한 가르침을 주셔서 너무 감사올립니다~ 가르쳐주신대로 꼭 실천하고 문제해결하겠습니다~^^

답변을 작성하려면 로그인이 필요합니다.