no spam

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

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

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

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

אנחנו נשתמש בהוק בשם register_form להוספה של שדה לטופס ההרשמה שלנו.
נשתמש בהוק registration_errors כדי לבצע ולידציה למלכודת שלנו.
[prism lang="php"]
add_action( 'register_form', array( $this, 'add_honeypot' ) );
add_filter( 'registration_errors', array( $this, 'verify_register_honeypot' ), 10, 3 );
[/prism]

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

נשתמש בהוק comment_form_top להוספה של המלכודת לטופס התגובות
נשתמש בהוק preprocess_comment כדי לבצע ולידציה לפני שהתגובה נשמרת לבסיס הנתונים.
[prism lang="php"]
add_action( 'comment_form_top', array( $this, 'add_honeypot' ) );
add_filter( 'preprocess_comment', array( $this, 'verify_comments_honeypot' ) );
[/prism]

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

הפונקציה שמדפיסה את השדה שלנו תואמת בשני המקרים
[prism lang="php"]
public function add_honeypot() {
echo '';
}
[/prism]

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

[prism lang="php"]
private function verify_honeypot() {

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

if ( ! empty( $_POST['catch'] ) ) {
wp_die( 'Stop Spam' );
}
}
[/prism]

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

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

[prism lang="php"]
';
}

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;
[/prism]