no spam

עצירת הספאם באתר הוורדפרס שלכם בעזרת Honeypot

מי מאתנו לא נפגע מספאם ? כולנו.
ספאם בהקשר של וורדפרס היא שליחה מסיבית של הודעות למערכת התגובות או למערכת הטפסים.
במאמר הזה אנחנו נדון בטכניקה מאוד פופולרית למלחמה בספאם בשם: "מלכודת דבש – honeypot".
רוב הספאם שמגיע אלינו היום הוא למעשה תוצאה של סקריפט או בוט אוטומטי. סקריפט הוא טיפש הוא ממלא את כל השדות בלי להתחשב בשום מצב.
honeypot – כשמה כן היא, למעשה מנצלת את זה ועל ידי הטמעה של שדה נסתר נוכל לבדוק אם השדה מלא או לא. אם הוא מלא אז למעשה זאת פעולה של בוט ונוכל להתעלם או לחסום מהבקשה.

במדריך זה אני אראה לכם איך להטמיע honeypot בעזרת קוד ולחסל את הספאם באתר.
את הקוד יש להדביק בקובץ functions.php או להוריד ולעלות בתור תוסף.

הוקים – תהליך ההרשמה

אנחנו נשתמש בהוק בשם register_form להוספה של שדה לטופס ההרשמה שלנו.
נשתמש בהוק registration_errors כדי לבצע ולידציה למלכודת שלנו.


add_action( 'register_form', array( $this, 'add_honeypot' ) );
add_filter( 'registration_errors', array( $this, 'verify_register_honeypot' ), 10, 3 );

הוקים – תגובות

נשתמש בהוק comment_form_top להוספה של המלכודת לטופס התגובות
נשתמש בהוק preprocess_comment כדי לבצע ולידציה לפני שהתגובה נשמרת לבסיס הנתונים.


add_action( 'comment_form_top', array( $this, 'add_honeypot' ) );
add_filter( 'preprocess_comment', array( $this, 'verify_comments_honeypot' ) );

המתודות/פונקציות – לוגיקה

הפונקציה שמדפיסה את השדה שלנו תואמת בשני המקרים


	public function add_honeypot() {
		echo '<input type="hidden" name="catch" value="" />';
	}

בפונקציות הולידציה verify_register_honeypot ו- verify_comments_honeypot נבצע קריאה לאותה פונקציה שתבצע את הלוגיקה של הולידציה


	private function verify_honeypot() {
		if ( ! isset( $_POST['catch'] ) ) {
			wp_die( 'Stop Spam' );
		}
		if ( ! empty( $_POST['catch'] ) ) {
			wp_die( 'Stop Spam' );
		}
	}

סיכום וקוד סופי

אני מצרף את הקוד כאן במבנה של תוסף, במעבר עכבר מעל הקטע קוד יצוץ לכם סרגל בצד ימין עם כפתור "שמירה כ- ZIP".
את קובץ ה- ZIP תעלו לאתר שלכם כתוסף.


<?php
/*
Plugin Name: WPDEV Stop Spam
Description: Stop Spam With Honeypot
Plugin URI: https://wpdev.co.il
Author: Yehuda Hassine
Author URI: https://wpdev.co.il
Version: 1.0
License: GPL3
*/
class WPDEV_Stop_Spam {

	public function __construct() {
		// Register
		add_action( 'register_form', array( $this, 'add_honeypot' ) );
		add_filter( 'registration_errors', array( $this, 'verify_register_honeypot' ), 10, 3 );

		// Comments
		add_action( 'comment_form_top', array( $this, 'add_honeypot' ) );
		add_filter( 'preprocess_comment', array( $this, 'verify_comments_honeypot' ) );
	}

	public function add_honeypot() {
		echo '<input type="hidden" name="catch" value="" />';
	}
	public function verify_register_honeypot( $errors, $sanitized_user_login, $user_email ) {
		$this->verify_honeypot();
		return $errors;
	}
	public function verify_comments_honeypot( $commentdata ) {
		$this->verify_honeypot();
		return $commentdata;
	}
	private function verify_honeypot() {
		if ( ! isset( $_POST['catch'] ) ) {
			wp_die( 'Stop Spam' );
		}
		if ( ! empty( $_POST['catch'] ) ) {
			wp_die( 'Stop Spam' );
		}
	}
}
new WPDEV_Stop_Spam;

מפתח וורדפרס עם ניסיון של חמש שנים בפיתוח תוספים ותבניות.
היה לי העונג לעבוד מפרוייקטים קטנים עד לפרוייקטים גדולים לחברות הגדולות במשק.
אפשר למצוא אותי גם בקבוצה: פיתוח וורדפרס בפייסבוק.