이메일 스팸봇 차단을 위한 워드프레스의 방식

웹사이트마다 접속하여 이메일 수집 후 스팸을 보내는 스패머가 있다면 순수하지만 어리석기 짝이 없을 것입니다. 따라서 당연히 이메일 수집기와 같은 프로그램을 실행하여 자동 및 대량으로 스팸을 보낼 것입니다.

이메일은 보통 특정 패턴의 문자로 노출되는데, 워드프레스 사이트에 이메일 출력할 때 특정 함수를 사용하여 스패머가 이메일을 수집하지 못하도록 설정할 수 있습니다. 몇 가지 경우에 관하여 알아봅니다.

antispambot

이 함수는 이메일 주소를 부호화하여 사이트 소스에 출력하며, 사이트에서는 알아볼 수 있는 이메일을 출력합니다.

// $hex_encoding - 0 or 1. Demical 인코딩 ({) 또는 Hex encoding (&x7B;). Default: 0
antispambot( $email_address, $hex_encoding )

이메일 주소 일부를 무작위(random)로 부호화하므로 이메일 주소가 있는 페이지가 새로 로드될 때마다 달라지므로 제법 유용합니다. 이어 나오는 예시를 보고 이해를 더하면 됩니다.

사이트 전역의 대표 이메일

사이트 아래 담당 또는 대표 이메일을 표시하는 때가 많습니다. 테마를 직접 수정하여 이메일을 표시한다면 함수와 기본 패턴으로 쉽게 처리할 수 있습니다.

// 관리자 이메일 (예) manager@yourdomain.com

$admin_email = get_option( 'admin_email' ); // 관리자 이메일

echo esc_html( antispambot( $admin_email ) ); // 링크 없이 출력
echo '<a href="mailto:' . esc_html( antispambot( $admin_email ) ) . '">' . esc_html( antispambot( $admin_email ) ) . '</a>'; // 링크 포함 출력

사이트에서는 다음처럼 쉽게 인식할 수 있는 이메일 주소가 출력됩니다.

// 사이트 출력 결과
manager@yourdomain.com // 링크 포함 또는 없이 출력

사이트의 Html 소스를 보면 다음 그림처럼 출력됩니다.

사이트 소스의 부호화 이메일 주소

사이트 소스 출력 결과에서 관리자 이메일은 같지만, 링크가 있을 때와 없을 때의 3개의 인코딩 문자가 다른 것으로 해당 함수가 이메일 주소 일부를 무작위로 부호화한다는 것을 알 수 있습니다.

사이트 소스에서 확인한다는 것은 크롬 브라우저의 ‘검사’ 또는 ‘개발자 도구 (F12)’와 같은 화면이 아니라 브라우저의 Html ‘페이지 소스 보기’ 화면을 말하므로 부호화 출력 확인 시 혼동하지 않아야 합니다.

개별 포스트 콘텐츠에 표시할 때

여러 사용자가 포스트를 생산하는 사이트에서 각 포스트에 작성자 이메일을 출력할 때가 있습니다. 이때는 워드프레스 Shortcode 사전 정의로 필요할 때 포스트 작성 시 삽입하거나 자동으로 삽입할 수 있습니다.

콘텐츠 내 원하는 곳에 필요할 때 추가

다음 Shortcode 설정으로 포스트 작성 시 이메일 주소를 사이트 소스에는 부호화하면서 사이트에 이메일 주소를 출력할 수 있습니다. 파라미터를 추가하지 않고 간단한 싱글 브래킷Brakets Shortcode 방식으로 처리하면 됩니다.

add_shortcode('author_email', 'wp_antispam_email');
function wp_antispam_email() {
    return esc_html( antispambot( get_the_author_meta('user_email') ) );
}

포스트 작성 시 다음 Shortcode를 원하는 곳에 추가하면 포스트 작성자의 부호화한 이메일 주소를 사이트 소스에 출력할 수 있습니다.

// 포스트 콘텐츠 내 원하는 위치에 추가
[author_email]

콘텐츠 끝에 자동으로 추가

콘텐츠 끝에 다음처럼 the_content 필터 훅을 사용하여 출력할 수 있습니다.

add_filter( 'the_content', 'wp_antispam_email_end_content' );
function wp_antispam_email_end_content( $content ) {
        //return $content . do_shortcode( '[author_email]' ); // Shortcode 사용할 때
        return $content . esc_html( antispambot( get_the_author_meta('user_email') ) ); // 함수를 사용할 때
    }
}

위젯에 추가

‘텍스트’ 위젯에 Shortcode를 추가하여 이메일 주소를 출력할 수도 있습니다.

텍스트 위젯에 Shortcode 추가

그러나, 현재의 워드프레스 버전(4.9.1)에서는 위젯에 Shortcode를 추가해도 인식하지 않기에 다음 1번 줄의 코드를 추가해야 사이트에서 이메일 주소가 출력됩니다.

add_filter( 'widget_text', 'do_shortcode' );
add_filter( 'widget_text', 'shortcode_unautop' );

2번 줄은 Shortcode로 출력하는 콘텐츠의 <p>, </p> 태그를 제거하는 것인데, 1번 또는 2번 줄 중에 하나만 추가해도 위젯에서 Shortcode 사용이 가능합니다. 따라서, 태그 제거를 기준으로 선택하거나 2가지 모두 추가하여 사용하면 됩니다.

정리

자바스크립트, @ 변경, 이미지로 표시 등 이메일 주소를 스패머에게 쉽게 주지 않기 위한 다른 기초적 방법이 있습니다.

Protection From Harvesters

워드프레스에서는 함수나 Shortcode가 가장 편리하며, 그중에서 함수를 이용하여 사이트 전체의 대표 이메일이나 포스트 끝에 작성자의 이메일을 자동으로 추가하는 방식을 익히는 것이 좋습니다.