SPAM Filter
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
* SPAM Filterについて [#y347e413]
基本的には[[ここ:https://dajya-ranger.com/sdm_downloads/s...
導入にあたって、一部直しています。
**lib/spam_filter.php [#v2303f38]
reCAPTCHA v2 と reCAPTCHA v3 が逆になっている気がしたので...
あとはAkismetを無効にしてブラックリストを有効に。
そのうちAkismetも有効にしたい。
--- lib/spam_filter.php.orig 2021-02-07 21:44:46.00000...
+++ lib/spam_filter.php 2021-02-07 22:57:08.00000...
@@ -61,7 +61,8 @@
//define('SPAM_FILTER_COND', ''#useragent() or #filenam...
// ※デフォルトでempty(空)入力チェック・Akismet・reCAP...
-define('SPAM_FILTER_COND', '#ngempty() or #akismet() or...
+//define('SPAM_FILTER_COND', '#ngempty() or #akismet() ...
+define('SPAM_FILTER_COND', '#ngempty() or #recaptcha() ...
//// CAPTCHAでのチェックをする条件を指定する
// ※SPAM_FILTER_CONDで明示的に「#recaptcha()」を指定す...
@@ -849,12 +850,12 @@
$secret_key = SPAM_FILTER_RECAPTCHA_SECRE...
- if (SPAM_FILTER_RECAPTCHA_CHECK =='v2') {
- // reCAPTCHA v2
- $response=file_get_contents("http...
- } elseif (SPAM_FILTER_RECAPTCHA_CHECK =='...
+ if (SPAM_FILTER_RECAPTCHA_CHECK =='v3') {
// reCAPTCHA v3
- $response=file_get_contents("http...
+ $response=file_get_contents("http...
+ } elseif (SPAM_FILTER_RECAPTCHA_CHECK =='...
+ // reCAPTCHA v2
+ $response=file_get_contents("http...
} else {
// SPAM_FILTER_RECAPTCHA_CHECKが...
return FALSE;
**plugin/edit.inc.php [#db0ff2a7]
reCAPTCHA 関係のJS読み込みを追加。
--- plugin/edit.inc.php.orig 2021-02-07 22:05:14.00000...
+++ plugin/edit.inc.php 2021-02-07 22:05:43.00000...
@@ -13,6 +13,8 @@
{
global $vars, $_title_edit;
+ plugin_edit_insert_recaptcha_script_tag();
+
if (PKWK_READONLY) die_message('PKWK_READONLY pro...
// Create initial pages
@@ -288,3 +290,12 @@
init_autoalias_def_page();
}
}
+
+function plugin_edit_insert_recaptcha_script_tag() {
+ global $head_tags;
+
+ $head_tags[] = '<!-- reCAPTHA -->';
+ $head_tags[] = sprintf('<script src="https://www.go...
+ $head_tags[] = sprintf('<script>const RECAPTCHA_SIT...
+ $head_tags[] = '<script src="./skin/recaptcha.js"><...
+}
**skin/recaptcha.js [#p29a4fa9]
もうIE対応は必要ないよね、ということで雑に実装。
プレビューボタンと更新ボタンにイベントハンドラを設定して、
reCAPTCHA実行後に、hidden を追加して、submit。
なんだけど、これだとページ遷移時にダイアログが出てしまう。
そのうち、もうちょっと真面目な実装に切り替えるかもしれな...
window.addEventListener('DOMContentLoaded', function() {
function getForm(node) {
if (node === null || node.tagName === 'FORM') {
return node;
}
return getForm(node.parentNode);
}
['preview', 'write'].forEach(function(action) {
document.getElementsByName(action).forEach(funct...
const form = getForm(element);
const name = element.name;
const value = element.value;
element.addEventListener('click', function(e...
e.preventDefault();
grecaptcha.ready(function() {
grecaptcha.execute(RECAPTCHA_SITEKEY...
const submit = document.createEl...
submit.type = 'hidden';
submit.name = name;
submit.value = value;
form.appendChild(submit);
const tokenElement = document.cr...
tokenElement.type = 'hidden';
tokenElement.name = 'g-recaptcha...
tokenElement.value = token;
form.appendChild(tokenElement);
window.onbeforeunload = null;
form.submit();
});
});
});
});
});
});
変更した。reCAPTCHA のトークンは2分で切れるので、110秒ご...
window.addEventListener('DOMContentLoaded', function() {
const forms = document.getElementsByClassName('_plug...
for (let i = 0; i < forms.length; i++) {
const form = forms[i];
const hidden = document.createElement('input');
hidden.type = 'hidden';
hidden.name = 'g-recaptcha-response';
form.appendChild(hidden);
}
grecaptcha.ready(function() {
function recaptchaExecute() {
grecaptcha.execute(RECAPTCHA_SITEKEY, { acti...
document.getElementsByName('g-recaptcha-...
element.value = token;
});
// retry after 110 sec because reCAPTCHA...
setTimeout(recaptchaExecute, 110 * 1000);
});
}
recaptchaExecute();
});
});
終了行:
* SPAM Filterについて [#y347e413]
基本的には[[ここ:https://dajya-ranger.com/sdm_downloads/s...
導入にあたって、一部直しています。
**lib/spam_filter.php [#v2303f38]
reCAPTCHA v2 と reCAPTCHA v3 が逆になっている気がしたので...
あとはAkismetを無効にしてブラックリストを有効に。
そのうちAkismetも有効にしたい。
--- lib/spam_filter.php.orig 2021-02-07 21:44:46.00000...
+++ lib/spam_filter.php 2021-02-07 22:57:08.00000...
@@ -61,7 +61,8 @@
//define('SPAM_FILTER_COND', ''#useragent() or #filenam...
// ※デフォルトでempty(空)入力チェック・Akismet・reCAP...
-define('SPAM_FILTER_COND', '#ngempty() or #akismet() or...
+//define('SPAM_FILTER_COND', '#ngempty() or #akismet() ...
+define('SPAM_FILTER_COND', '#ngempty() or #recaptcha() ...
//// CAPTCHAでのチェックをする条件を指定する
// ※SPAM_FILTER_CONDで明示的に「#recaptcha()」を指定す...
@@ -849,12 +850,12 @@
$secret_key = SPAM_FILTER_RECAPTCHA_SECRE...
- if (SPAM_FILTER_RECAPTCHA_CHECK =='v2') {
- // reCAPTCHA v2
- $response=file_get_contents("http...
- } elseif (SPAM_FILTER_RECAPTCHA_CHECK =='...
+ if (SPAM_FILTER_RECAPTCHA_CHECK =='v3') {
// reCAPTCHA v3
- $response=file_get_contents("http...
+ $response=file_get_contents("http...
+ } elseif (SPAM_FILTER_RECAPTCHA_CHECK =='...
+ // reCAPTCHA v2
+ $response=file_get_contents("http...
} else {
// SPAM_FILTER_RECAPTCHA_CHECKが...
return FALSE;
**plugin/edit.inc.php [#db0ff2a7]
reCAPTCHA 関係のJS読み込みを追加。
--- plugin/edit.inc.php.orig 2021-02-07 22:05:14.00000...
+++ plugin/edit.inc.php 2021-02-07 22:05:43.00000...
@@ -13,6 +13,8 @@
{
global $vars, $_title_edit;
+ plugin_edit_insert_recaptcha_script_tag();
+
if (PKWK_READONLY) die_message('PKWK_READONLY pro...
// Create initial pages
@@ -288,3 +290,12 @@
init_autoalias_def_page();
}
}
+
+function plugin_edit_insert_recaptcha_script_tag() {
+ global $head_tags;
+
+ $head_tags[] = '<!-- reCAPTHA -->';
+ $head_tags[] = sprintf('<script src="https://www.go...
+ $head_tags[] = sprintf('<script>const RECAPTCHA_SIT...
+ $head_tags[] = '<script src="./skin/recaptcha.js"><...
+}
**skin/recaptcha.js [#p29a4fa9]
もうIE対応は必要ないよね、ということで雑に実装。
プレビューボタンと更新ボタンにイベントハンドラを設定して、
reCAPTCHA実行後に、hidden を追加して、submit。
なんだけど、これだとページ遷移時にダイアログが出てしまう。
そのうち、もうちょっと真面目な実装に切り替えるかもしれな...
window.addEventListener('DOMContentLoaded', function() {
function getForm(node) {
if (node === null || node.tagName === 'FORM') {
return node;
}
return getForm(node.parentNode);
}
['preview', 'write'].forEach(function(action) {
document.getElementsByName(action).forEach(funct...
const form = getForm(element);
const name = element.name;
const value = element.value;
element.addEventListener('click', function(e...
e.preventDefault();
grecaptcha.ready(function() {
grecaptcha.execute(RECAPTCHA_SITEKEY...
const submit = document.createEl...
submit.type = 'hidden';
submit.name = name;
submit.value = value;
form.appendChild(submit);
const tokenElement = document.cr...
tokenElement.type = 'hidden';
tokenElement.name = 'g-recaptcha...
tokenElement.value = token;
form.appendChild(tokenElement);
window.onbeforeunload = null;
form.submit();
});
});
});
});
});
});
変更した。reCAPTCHA のトークンは2分で切れるので、110秒ご...
window.addEventListener('DOMContentLoaded', function() {
const forms = document.getElementsByClassName('_plug...
for (let i = 0; i < forms.length; i++) {
const form = forms[i];
const hidden = document.createElement('input');
hidden.type = 'hidden';
hidden.name = 'g-recaptcha-response';
form.appendChild(hidden);
}
grecaptcha.ready(function() {
function recaptchaExecute() {
grecaptcha.execute(RECAPTCHA_SITEKEY, { acti...
document.getElementsByName('g-recaptcha-...
element.value = token;
});
// retry after 110 sec because reCAPTCHA...
setTimeout(recaptchaExecute, 110 * 1000);
});
}
recaptchaExecute();
});
});
ページ名: