Najskuteczniejsze wykrywanie kodu PHP antyspamowego dla WordPress
Blog wordpress może otrzymywać ponad 100 komentarzy spamowych (produkowanych przez roboty spamujące) dziennie, co jest denerwujące.
wordpress-spam
Generalnie mogą one zostać przechwycone przez wtyczki, takie jak Akismet, jednak dane te są nadal przechowywane w bazie danych, zanim zostaną ręcznie usunięte lub po upływie daty ważności.
LEONA zapewnia sprytne rozwiązanie zapobiegające przedostawaniu się tych spamowych komentarzy nawet do bazy danych. Polega na umieszczeniu w formularzu ukrytego pola i ustawieniu wartości, gdy użytkownik naciśnie klawisz (onkeyup). Więc jeśli wartości nie pasują, myślimy, że nie jest to składane przez człowieka.
wordpress zapewnia filtr preprocess_comment, dzięki czemu możesz sprawdzić komentarze i wyjść ze strony wcześniej za pomocą wp_die().
WP Official API mówi (https://codex.wordpress.org/Plugin_API/Filter_Reference/preprocess_comment ), $commentdata zawiera następujące informacje:
'comment_post_ID' - The post to which the comment will apply
'comment_author' - (may be empty)
'comment_author_email' - (may be empty)
'comment_author_url' - (may be empty)
'comment_content' - The text of the proposed comment
'comment_type' - 'pingback', 'trackback', or empty for regular comments
'user_ID' - (empty if not logged in)
Następnie możemy użyć tej wtyczki, aby umożliwić pingback/trackback (co moim zdaniem jest przydatne) i skutecznie pozbyć się komentarzy spamowych.
$leonax_magic_lower = 328;
$leonax_magic_upper = 3450709;
function leonax_anti_spam_form($fields){
global $leonax_magic_lower, $leonax_magic_upper;
$leonax_magic = mt_rand($leonax_magic_lower, $leonax_magic_upper);
$fields['leonax_magic'] = <<<EOT
<input type="hidden" id="leonax-magic" name="leonax-magic" value="0">
<script type="text/javascript">
jQuery(function() {
jQuery("#comment").on("keyup", function() {
jQuery("#leonax-magic").val("$leonax_magic");
});
})
</script>
EOT;
return $fields;
}
add_filter('comment_form_default_fields', 'leonax_anti_spam_form');
function leonax_anit_spam_caught() {
wp_die('<strong>ERROR</strong>: Looks like you are a spam bot. Please stop doing this.');
}
function leonax_anti_spam_check( $commentdata) {
$comment_type = '';
if (isset($commentdata['comment_type'])) {
$comment_type = trim($commentdata['comment_type']);
}
if (($comment_type == 'pingback') || ($comment_type == 'trackback')) {
return $commentdata;
}
$content = '';
if (isset($commentdata['comment_content'])) {
$content = trim($commentdata['comment_content']);
}
if (!strlen($content)) {
leonax_anit_spam_caught();
}
if (preg_match("/[a-e0-9]{25,}/i", $content)) { // To capture the strange IDs
leonax_anit_spam_caught();
}
global $leonax_magic_lower, $leonax_magic_upper;
if (isset($commentdata['user_ID']) && $commentdata['user_ID']) { // Login-users are not bad
return $commentdata;
}
if (!isset($_POST['leonax-magic'])) {
leonax_anit_spam_caught();
}
$magic = intval($_POST['leonax-magic']);
if ($magic < $leonax_magic_lower || $magic > $leonax_magic_upper) {
leonax_anit_spam_caught();
}
return $commentdata;
}
add_filter( 'preprocess_comment', 'leonax_anti_spam_check' );
Jeśli przetestujemy funkcję/filtr, wpisując celowo dziwne identyfikatory, otrzymamy następujące informacje (a komentarz nie zostanie wpisany w obszar oczekiwania).
Uwaga: Umieść powyższy kod na końcu szablonu functions.php (lub motywu potomnego).
WordPress-wykrywanie spamu
Działa jak magia!

