21'C 흐림
서울 강남구
요즘 많이들 사용하고 있는 클라우드플레어(CloudFlare) 캡차를 구글 rechatcha 참고해서 그누보드에 적용해봤습니다.
https://www.cloudflare.com/ko-kr/products/turnstile/
클라우드플레어 가입하셔서 사이트 키, 시크릿 키 환경설정에 입력 해주셔야 정상적으로 실행됩니다.
아래는 변경한 코드들 입니다.
// adm/config_form.php
if (!isset($config['cf_captcha_site_key'])) {
sql_query(
"ALTER TABLE `{$g5['config_table']}`
ADD `cf_captcha_site_key` varchar(100) NOT NULL DEFAULT '' AFTER `cf_captcha`,
ADD `cf_captcha_secret_key` varchar(100) NOT NULL DEFAULT '' AFTER `cf_captcha_site_key`
", true);
}
// adm/config_form.php
<tr>
<th scope="row"><label for="cf_captcha">캡챠 선택<strong class="sound_only">필수</strong></label></th>
<td colspan="3">
<?php echo help('사용할 캡챠를 선택합니다.<br>1) Kcaptcha 는 그누보드5의 기본캡챠입니다. ( 문자입력 )<br>2) reCAPTCHA V2 는 구글에서 서비스하는 원클릭 형식의 간편한 캡챠입니다. ( 모바일 친화적 UI )<br>3) Invisible reCAPTCHA 는 구글에서 서비스하는 안보이는 형식의 캡챠입니다. ( 간혹 퀴즈를 풀어야 합니다. )<br>') ?>
<select name="cf_captcha" id="cf_captcha" required class="required">
<option value="kcaptcha" <?php echo get_selected($config['cf_captcha'], 'kcaptcha'); ?>>Kcaptcha</option>
<option value="recaptcha" <?php echo get_selected($config['cf_captcha'], 'recaptcha'); ?>>reCAPTCHA V2</option>
<option value="recaptcha_inv" <?php echo get_selected($config['cf_captcha'], 'recaptcha_inv'); ?>>Invisible reCAPTCHA</option>
<option value="cloudflare" <?php echo get_selected($config['cf_captcha'], 'cloudflare'); ?>>CloudFlare</option>
</select>
</td>
</tr>
<tr class="kcaptcha_mp3">
<th scope="row"><label for="cf_captcha_mp3">음성캡챠 선택<strong class="sound_only">필수</strong></label></th>
<td colspan="3">
<?php echo help('kcaptcha 사용시 ' . str_replace(array('recaptcha_inv', 'recaptcha', 'cloudflare'), 'kcaptcha', G5_CAPTCHA_URL) . '/mp3 밑의 음성 폴더를 선택합니다.') ?>
<select name="cf_captcha_mp3" id="cf_captcha_mp3" required class="required">
<?php
$arr = get_skin_dir('mp3', str_replace(array('recaptcha_inv', 'recaptcha', 'cloudflare'), 'kcaptcha', G5_CAPTCHA_PATH));
for ($i = 0; $i < count($arr); $i++) {
if ($i == 0) {
echo "<option value="">선택</option>";
}
echo "<option value="" . $arr[$i] . """ . get_selected($config['cf_captcha_mp3'], $arr[$i]) . ">" . $arr[$i] . "</option>n";
}
?>
</select>
</td>
</tr>
<tr>
<th scope="row"><label for="cf_recaptcha_site_key">구글 reCAPTCHA Site key</label></th>
<td colspan="3">
<?php echo help('reCAPTCHA V2와 Invisible reCAPTCHA 캡챠의 sitekey 와 secret 키는 동일하지 않고, 서로 발급받는 키가 다릅니다.') ?>
<input type="text" name="cf_recaptcha_site_key" value="<?php echo get_sanitize_input($config['cf_recaptcha_site_key']); ?>" id="cf_recaptcha_site_key" class="frm_input" size="52"> <a href="https://www.google.com/recaptcha/admin" target="_blank" class="btn_frmline">reCAPTCHA 등록하기</a>
</td>
</tr>
<tr>
<th scope="row"><label for="cf_recaptcha_secret_key">구글 reCAPTCHA Secret key</label></th>
<td colspan="3">
<input type="text" name="cf_recaptcha_secret_key" value="<?php echo get_sanitize_input($config['cf_recaptcha_secret_key']); ?>" id="cf_recaptcha_secret_key" class="frm_input" size="52">
</td>
</tr>
<tr>
<th scope="row"><label for="cf_captcha_site_key">CloudFlare CAPTCHA Site key</label></th>
<td colspan="3">
<input type="text" name="cf_captcha_site_key" value="<?php echo get_sanitize_input($config['cf_captcha_site_key']); ?>" id="cf_captcha_site_key" class="frm_input" size="52"> <a href="https://www.cloudflare.com/ko-kr/products/turnstile<a>" target="_blank" class="btn_frmline">CloudFlare CAPTCHA 등록하기</a>
</td>
</tr>
<tr>
<th scope="row"><label for="cf_captcha_secret_key">CloudFlare CAPTCHA Secret key</label></th>
<td colspan="3">
<input type="text" name="cf_captcha_secret_key" value="<?php echo get_sanitize_input($config['cf_captcha_secret_key']); ?>" id="cf_captcha_secret_key" class="frm_input" size="52">
</td>
</tr>
// adm/config_form.php
$("#cf_captcha").on("change", function() {
if ($(this).val() == 'recaptcha' || $(this).val() == 'recaptcha_inv' || $(this).val() == 'cloudflare') {
$("[class^='kcaptcha_']").hide();
} else {
$("[class^='kcaptcha_']").show();
}
}).trigger("change");
// adm/config_form_update.php
$check_keys = array('cf_cert_kcb_cd', 'cf_cert_kcp_cd', 'cf_editor', 'cf_recaptcha_site_key', 'cf_recaptcha_secret_key', 'cf_captcha_site_key', 'cf_captcha_secret_key', 'cf_naver_clientid', 'cf_naver_secret', 'cf_facebook_appid', 'cf_facebook_secret', 'cf_twitter_key', 'cf_twitter_secret', 'cf_google_clientid', 'cf_google_secret', 'cf_googl_shorturl_apikey', 'cf_kakao_rest_key', 'cf_kakao_client_secret', 'cf_kakao_js_apikey', 'cf_payco_clientid', 'cf_payco_secret', 'cf_cert_kg_cd', 'cf_cert_kg_mid');
// adm/config_form_update.php
cf_captcha = '{$_POST['cf_captcha']}',
cf_recaptcha_site_key = '{$_POST['cf_recaptcha_site_key']}',
cf_recaptcha_secret_key = '{$_POST['cf_recaptcha_secret_key']}',
cf_captcha_site_key = '{$_POST['cf_captcha_site_key']}',
cf_captcha_secret_key = '{$_POST['cf_captcha_secret_key']}',
나머지는 plugin/cloudflare 폴더를 업로드 해주시면 됩니다.