הסתרת כתובות אי-מייל ממנועי ספאם

‏ • 14 ביוני, 2004

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

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

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

לא מזמן קיבלתי טלפון מלקוח ששאל "מזה הקובץ הזה ששלחת לי? הוא לא עולה לי…". גם אליו וגם אלי הגיע מייל עם הכותרת "rights reverved to xxx" כש-xxx היה שמו של האתר. הוא חשב שמדובר באיזה ניסוח ל"הצהרת פרטיות" או משהוא (ו'אכל אותה' כמובן), מהצד שלי תוכנת האנטי וירוס מחקה את הקובץ אוטומטית.

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

במאמר אשתמש ב-JavaScript, פשוט כי בשפה זו אני כותב ואיתה הכי נוח לי. כמובן שאפשר לממש כזה סריפט גם ב-VBScript.

נתחיל ברעיון:
המנוע סורק קוד. החוקיות של כתובת של תיבת דואר אלקטרוני ברורה לכולנו: name@server.ext. תמיד יהיה כרוכית ונקודה בכתובת, ועל כך המנוע מתבסס.

ובכן, פה מתחיל ונגמר כל הסיפור: אם הכתובת לא תהיה כתובה בחוקיות הזאת פיסית בקוד שלנו, אלא רק תוצג ללקוח כך, פתרנו את כל הבעיה. אם נציג למשל את הכתובת כך: nameATserver.com ונהפוך את "AT" ל-@" לפני ההצגה (בצד לקוח), רוב המנועים לא יזהו את הסטרינג הזה ככתובת דואר אלקטרוני וידלגו עליה, אם כי עדיין יש כאן חוקיות ומפתח של כזה מנוע יוכל ללמד את המנוע שלו גם כזה סוג של חוקיות (במידה ושיטה זו תרווח לה).

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

אביא את הקוד ולאחריו הסבר:






1
2
3
4
5
6
7  




<script language="javascript" type="text/javascript">
    function fEmail(sName,sDomain){
        window.open("mailto:"+sName+"@"+sDomain);
    }
</script>

<span onclick="fEmail('bill','microsoft.com');">Send Me eMail</span>


קוד פשוט למדי לשולטים בשפה. הפונקציה נקראת באירוע onClick של ה-Span, ששולחת לה 2 ערכים: שם תיבה ושם דומיין.

בשיטה זו, מנוע שירוץ על הקוד לא ימצא בשום מקום בקוד כתובת דואר אלקטרוני, ואילו משתמש שילחץ על אותו Span, תיפתח לו תוכנת הדואר האלקטרוני שלו כשבכתובת (To) תופיע כתובת היעד.

ובכן, זה עדיין לא נראה כמו לינק mailto של ממש, ולכן יש מקום לשיפור:






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16  




<script language="javascript" type="text/javascript">
    window.defaultStatus="";

    function fEmail(sHE, sName,sDomain){
        if(sHE=="click")
            window.open("mailto:"+sName+"@"+sDomain);
        else
            window.status="mailto:"+sName+"@"+sDomain;
    }
</script>

<span
    onclick="fEmail('click','bill','microsoft.com');"
    onmouseover="fEmail('over','bill','microsoft.com');">
    Send Me eMail
</span>


הערה: הוספתי את defaultStatus כדי שביציאה מה-Span הכיתוב בסטטוס יתרוקן ולא ישאר הכתובת mailto.

זאת כל התורה.

ניתן לשכלל את העסק, ולהפריד למשל את סיומת האתר משם הדומיין עצמו ('microsoft' & 'com') ובפונקציה לבנות גם את הנקודה. כמה שיותר מפורק כך קשה יותר יהיה למצוא חוקיות ולסרוק כתובות באתר.
יותר מזה – עדיף אף לשנות את שם הפונקציה למשהוא תלוש מהמציאות (אומנם זה נוגד את כל כללי התכנות הנכונים, אבל כשאין ברירה – אין ברירה…), ואפילו לשנות את סדר קליטת הערכים בפונקציה (למשל, קודם דומיין ורק אח"כ שם תיבה).

בנוסף – לא יזיק אם יוכנסו שינויים בסדר הערכים ובעיקביות בין אתר לאתר שאנחנו כותבים.

ובכן, אני מקווה שבמאמר זה צימצמתי 0.01 אחוזים מדואר הזבל במדינה, ולתפארת מדינת ישראל P-:

תגיות: , , , ,

תגובות בפייסבוק