Chặn spam cho contact form 7, bình luận

Chặn spam cho contact form 7, bình luận

Chặn spam cho contact form 7, bình luận

Contact form 7 hoặc các form trên website wordpress là điểm đến của spamer

Trong bài viết này mình giới thiệu đến một số function để bạn phát hiện và chặn spam trong bình luận và contact form 7

  1. Phát hiện tiếng Ả Rập và chặn
  2. Phát hiện tiếng Nga và chặn
  3. Phát hiện tiếng Trung và chặn
  4. Kiểm tra và chặn liên kết (URL) trong nội dung bình luận
  5. Kiểm tra và chặn thẻ HTML trong nội dung bình luận

Copy code sau và chèn vào file functions.php của theme đang dùng

<?php 

function coChuCaiArabic($str) {
    $bangChuCaiArabic = '/[\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{08A0}-\x{08FF}\x{FB50}-\x{FDFF}\x{FE70}-\x{FEFF}]/u';
    return preg_match($bangChuCaiArabic, $str);
}
function coKyTuTiengNga($str) {
    $bangChuCaiTiengNga = '/[\x{0410}-\x{044F}\x{0401}\x{0451}]/u';
    return preg_match($bangChuCaiTiengNga, $str);
}
function coKyTuTiengTrung($str) {
    $bangChuCaiTiengTrung = '/[\x{4e00}-\x{9fa5}]/u';
    return preg_match($bangChuCaiTiengTrung, $str);
}
function coLinkTrongNoiDung($str) {
    $regexLink = '/\b(?:https?|ftp):\/\/\S+\b/i';
    return preg_match($regexLink, $str);
}

function coTheHTMLTrongNoiDung($str) {
    $regexHTML = '/&lt;[^>]+>/';

    return preg_match($regexHTML, $str);
}
function coTuCamTrongNoiDung($commentContent, $tuCam) {
    foreach ($tuCam as $tu) {
        if (strpos($commentContent, $tu) !== false) {
            return true;
        }
    }
    return false;
}
function kiemTraVaChanBinhLuan($commentdata) {
    $tuCam = ['.com', '.vn', '.ru', 'https', 'http://', 'www.', '&lt;a>', '&lt;/a>', 'href='];
    $coKyTuTiengNga     = coKyTuTiengNga($commentdata['comment_content']);
    $coKyTuTiengTrung   = coKyTuTiengTrung($commentdata['comment_content']);
    $coChuCaiArabic     = coChuCaiArabic($commentdata['comment_content']);
    $coLinkTrongNoiDung = coLinkTrongNoiDung($commentdata['comment_content']);
    $coTheHTMLTrongNoiDung  = coTheHTMLTrongNoiDung($commentdata['comment_content']);
    $coTuCamTrongNoiDung    = coTuCamTrongNoiDung($commentdata['comment_content'], $tuCam);
    if ($coKyTuTiengNga) {
        wp_die('Vui lòng không spam&lt;br>Please do not spam.');
    }    
    if ($coKyTuTiengTrung) {
        wp_die('Vui lòng không spam&lt;br>Please do not spam.');
    }
    if ($coChuCaiArabic) {
        wp_die('Vui lòng không spam&lt;br>Please do not spam.');
    }
    if ($coLinkTrongNoiDung) {
        wp_die('Vui lòng không spam&lt;br>Please do not spam.');
    }
    if ($coTheHTMLTrongNoiDung) {
        wp_die('Vui lòng không spam&lt;br>Please do not spam.');
    }    
    if ($coTuCamTrongNoiDung) {
        wp_die('Vui lòng không spam&lt;br>Please do not spam.');
    }
    return $commentdata;
}
/**
 * Chặn bình luận bằng trường Ẩn
 * Hook để kích hoạt hàm xử lý trước khi lưu bình luận
*/
add_filter('preprocess_comment', 'kiemTraVaChanBinhLuan');
function themTruongAnVaoBinhLuan() {
    echo '&lt;input type="hidden" name="custom_hidden_field" id="custom_hidden_field" value="" />';
}
add_action('comment_form', 'themTruongAnVaoBinhLuan');
function kiemTraBotVaChanBinhLuan($commentdata) {
    $giaTriTruongAn = isset($_POST['custom_hidden_field']) ? sanitize_text_field($_POST['custom_hidden_field']) : '';
    if (!empty($giaTriTruongAn)) {
        wp_die('Mời bạn ăn bánh uống trà và tiếp tục spam!&lt;br>Feel free to have some cake, drink tea, and carry on with your spam!');
    }
    return $commentdata;
}
add_filter('preprocess_comment', 'kiemTraBotVaChanBinhLuan');


/**
 * =================================================
 * Chặn spam contact form 7
 * =================================================
 * */
add_filter('wpcf7_spam', function($spam) {
    if ($spam) {
        return $spam;
    }

    $tuCam = ['.com', '.vn', '.ru', 'https', 'http://', 'www.', '&lt;a>', '&lt;/a>', 'href='];

    $yourMessage = isset($_POST['your-message']) ? sanitize_text_field($_POST['your-message']) : '';

    $coChuCaiArabic = coChuCaiArabic($yourMessage);
    if ($coChuCaiArabic) {
        $spam = true;
    }    
    $coKyTuTiengNga = coKyTuTiengNga($yourMessage);
    if ($coKyTuTiengNga) {
        $spam = true;
    }
    $coKyTuTiengTrung = coKyTuTiengTrung($yourMessage);
    if ($coKyTuTiengTrung) {
        $spam = true;
    }    
    $coLinkTrongNoiDung = coLinkTrongNoiDung($yourMessage);
    if ($coLinkTrongNoiDung) {
        $spam = true;
    }
    $coTheHTMLTrongNoiDung = coTheHTMLTrongNoiDung($yourMessage);
    if ($coTheHTMLTrongNoiDung) {
        $spam = true;
    }    
    $coTuCamTrongNoiDung = coTuCamTrongNoiDung($yourMessage, $tuCam);
    if ($coTuCamTrongNoiDung) {
        $spam = true;
    }

    return $spam;
}, 10, 1);

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *