טופס משלוח מייל בPHP עם Honeypot

החלטתי לכתוב את המאמר הזה מאחר וקיימים הרבה מאמרים ברשת ל"איך לכתוב טופס משלוח מייל" בלבד אני החלטתי להוסיף את התוספת המעניינית הזו אנשים שעוסקים בתכנות PHP יימצאו עניין במאמר זה , אני מקווה שתפיקו תועלת ותחסמו את הספאמרים לאלתר מהאתרים שלכם.

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

אז ככה , דבר ראשון אנחנו רוצים לבנות טופס בסיסי , אנחנו נעשה את זה ע"י יצירה של מערך שיכיל את שמות השדות שאותם אנחנו רוצים לבנות בתוך המערכת יהיה את המזהה של השדה בטופס ואת סוג השדה והערך (שבמקרה הזה אני משאיר אותו ריק , אבל אם תרצו בבקשה) , כמובן שזה מאוד בסיסי ויש המון PHP Classes שמסתובבים ברשת ויתנו מענה הולך יותר , אבל שוב אנחנו כאן בשביל הרעיון בלבד.

קודם כל , מה הוא HoneyPot ?
HoneyPot או בתרגום חופשי מלכודת דבש היא מלכודת שנועדה בעבור חרקים (ואל תתפסו אותי במילה 🙂 ) היא בנויה מפיתיון ובמידה וחרק היה עולה על הפיתיון הוא היה נתפס , משם מגיע שמה.
מאותו רעיון אנחנו מעוניינים שאותו רובוט "ידרוך" על מלכודת הדבש שלנו כדי שאנחנו לא נשלח את המייל במידה ודרך , ואם תרצו תוכלו להוסיף אפילו BlackList קטן במסד הנתונים שבכלל יחסום אותו מהטופס או מהאתר תלוי בצורך שלכם ** אנחנו לא נעשה את זה כאן אולי בפעם אחרת ** .
היתרונות של Honeypot על פני שיטות אחרות כגון Captcha הוא שאין הפרעה לגולש.

נתחיל בהצגת הקוד המלא ולאחר מכן אני אסביר מה עשיתי –

הסבר על הקוד –

ראשית , בניתי מערך שבו שמתי את כל השדות שאותם אני צריך בטופס –

מניתי אותם כך שבצורה הזו אני אוכל בקלות ליצור טופס לפי הנתונים שנתתי שם , לאחר מכן יצרתי את הטופס ע"י לולאת Foreach באופן הבא –

שימו לב שיצרתי שדה נוסף "מזוייף" שהוא מוסתר לעיני הגולשים באמצעות CSS בכדי שהרובוטים ימלאו אותו וכך אדע אם מדובר בספאמר או באדם.

בשלב הבא יצרתי Validation לנתונים , חייבתי את הגולש למלות את הכותרת ואת שמו , במידה וזיהיתי כי גם השדה "robotest" נמצא עם ערך מסויים , אז אני מעריך שמדובר ברובוט ומציג שגיאה.
בפועל מומלץ שלא להציג שגיאה כדי שהרובוטים אפילו ייטעו ויניחו שהטופס נשלח.

כמובן שאני ממליץ לשפר את הרעיון ולשכלל כמו שאמרתי ע"י Black list או ליצור שדות עם שמות רנדומליים אבל זה כבר לפעם הבאה 😉

תהנו!

UP