מי מאתנו לא נפגע מספאם ? כולנו.
ספאם בהקשר של וורדפרס היא שליחה מסיבית של הודעות למערכת התגובות או למערכת הטפסים.
במאמר הזה אנחנו נדון בטכניקה מאוד פופולרית למלחמה בספאם בשם: "מלכודת דבש – 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]
מפתח וורדפרס עם ניסיון של חמש שנים בפיתוח תוספים ותבניות.
היה לי העונג לעבוד מפרוייקטים קטנים עד לפרוייקטים גדולים לחברות הגדולות במשק.
אפשר למצוא אותי גם בקבוצה: פיתוח וורדפרס בפייסבוק.