הפתרון ל-Comment spam


כן, יש לי פתרון. באמת.

הוא:

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

נציין רק שהרעיון מבוסס על Merkel’s puzzles.

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

אלא שאנחנו נעשה תרגיל. במקום לשים את המספר ישירות בתוך ה-Form, נשים Javascript שמקבל מספר שמייצג את המספר שלנו, מוצפן באמצעות AES, ומקבל גם את כל הביטים של המפתח לפיענוח למעט 16. במילים אחרות, כדי לדעת איזה מספר צריך לשים בתוך ה-Form, יש צורך לבצע חיפוש על מרחב מפתחות בגודל 216. לא משהו שאיזשהו מחשב מודרני יתקשה במיוחד לעשות. החיפוש יתבצע ע”י קוד Javascript שיימצא בדף, ויכניס את הערך הנכון ברגע שימצא אותו.

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

מה שמשאיר לנו רק שאלה אחת לענות עליה. מישהו פה מרגיש שהוא יודע Javascript מספיק טוב כדי לממש את זה ל-Wordpress?

שחר

גרסה אנגלית של הפוסט פורסמה בבלוג שלי באנגלית

ש.

מאת

שחר שמש

מייסד–שותף וחבר ועד בתנועה לזכויות דיגיטליות מייסד שותף בעמותת „המקור”. פעיל קוד פתוח. מפתח שפת התכנות Practical

15 תגובות בנושא “הפתרון ל-Comment spam”

  1. קונספט מעניין… אם הבנתי. אתה נותן סטרינג רנדומלי ללא שני בתים, ואת הHASH שלו, פחות או יותר, ומשאיר לEcmascript לעשות 32K האשים בממוצע כדי לגלות את שני הבייטים החסרים. מעניין אם אפשר לעשות אימפלמנטציה של זה בזמן סביר בשפה פרימיטיבית ואינטרפרטד, או אולי קיים הוק להשתמש בפונקציות ההצפנה המובנות של הדפדפן. מצד שני הספאמרים יעשו את זה באימפלמנטציה בC, אבל עדיין זה יאיט אותם למדי.

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

  2. שחר יש מספר בעיות עם זה.

    כמה משאבים צריך להשקיע בשביל לפתור את החידה?
    נגיד דקת זמן חישוב של P4 2.5GHz? מתי החישוב יתבצע? בכל פעל שאני נכנס לפורום או בלוג (כמובן בפעם הראשונה באותו בלוג) אם כך אז בכל כניסה הדפדפן “יטחן” ויאיט בצורה משמעותית, ואם מדובר לפני שליחה – אז אתה צריך להמתין את הדקה או שניים עד שה-JS יעשה את החישוב…

    עכשיו תחשב – מעבד של 2.5GHz מבצע את זה במשך דקה שלמה – אז מישהו שיש לו מחשב ישן נגיד Pentium 3 עם מעבד חלש של 500MHz יעשה זאת במשך של כ-5-10 דקות (!) – כלומר כל מי שאין לו מחשב חדיש עלול להמתין כעשר דקות עד שהתגובה תישלח – וכל הזמן הזה הדפדפן יטחן CPU!

    אז נגיד שנעשה מחשב חלש יפתור את זה במשך דקה – אז מחשב חדיש שהתכנה תיכתב בצורה יעילה (נגיד ב-C במקום JavaScript) יפתור את החידה במשך שניות ספורות – שזה בהחלט לא בעיה, כי אם תשים לב, כל התקפת ספאם שולחן הודעות במרווחים מסויימים – כי אינרטנט מהווה בד”כ את צוואר הבקבוק — כך שפתרון חידה “לא יעמיס על ספאמר”

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

    בקיצור – לא נראה לי שזה יעבוד. בסופו של דבר לספאם לפי דעתי יש שתי פתרונות

    – ביצוע turing test איכותי ופשוט (כמו פיענוח תמונה)
    – עקיפת החוק – כשספאמרים יקבלו קנסות או ייכנסו לכלא.

  3. למיטב ידעתי פתרונות האנטי־ספאם של וורדפרס מיישמים פתרון זה.

    ב־mozilla.org.il שתלנו פתרון דומה, שאפילו לא דרש שימוש באלגוריתם ההצפנה – דפים מסויימים דורשים קוד מיוחד בשביל להיכנס אליהם, ומי שאין לו את הקוד מופנה לדף שמטעין את העוגיה באמצעות ג’אווה־סקריפט וטוען מחדש את הדף המבוקש. זה עובד יופי אצלנו, ואיפשר לפתוח את הפורומים באתר לתגובות ממשתמשים לא רשומים ולקבל אפס הודעות ספאם (בעבר בוטים היו נרשמים בטופס שכולל קאפצ’ה ואפילו ממתינים בסבלנות לקבלת קוד אישור בדוא”ל – היום הם אפילו לא מצליחים להירשם). הפתרון הזה פשוט ונוח, ולא דרש להתעסק עם קוד התוכנות שמותקנות בשרת אלא בקובץ htaccess בלבד.

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

  4. שחר, הפתרון הזה לא חדש – מדברים עליו כבר כמה שנים כפתרון לספאם רגיל (אתגר חישובי כחלק מה- SMTP). הבעיה העיקרית הוא שזה לא ממש פתרון – רוב הספאם מגיע מבוטנטים, והמחשב ששולח את התגובה הוא זומבי. בשיטה שלך רק האטת את קצב שליחת הספאם, פר פוסט (אם הבנתי נכון אפשר לשלוח מאות תגובות לאותו פוסט עם אותו “מפתח”). הענשת את הזומבים המסכנים שהמחשבים שלהם יטחנו הרבה במקום לשלוח דואר זבל ברקע כמו היום…

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

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

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

  6. באתר שלי עשיתי כמה צעדים שאמורים לעזור לי למנוע ספאם. כמובן שזה זמני.
    הצעדים שנקטתי הם די פשוטים למעשה:
    1. טעינת הטופס באמצעות JS.
    2. שאלה רנדומלית עם תשובה חד משמעית.
    3. שליחה של הטופס באמצעות JS.
    4. רק מנוע תקני של JS מצליח לרוץ (IE לא מצליח בגלל זה לעבור עם המנוע שלי בכלל).

    (עשיתי עוד כמה צעדים שאני לא הולך לדבר עליהם כרגע, אולי כשאשנה אותם אכתוב עליהם)

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

  7. And wouldn’t slowing down zombies be an advantage too? It will still slow down the spam sending and maybe will cause the owners to start doing something about the parasites they host on their computers.

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

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

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

  11. פינגבאק: xslf.com
  12. רעיון נחמד…
    עוד רעיון מעניין: במקום לתת למשתמש להוכיח כי הוא בן-אנוש, ניתן לבוט להוכיח כי הוא אינו כזה.
    לדוגמה, הוספת שדה בשם your_site לטופס והעלמה שלו ע”י js או CSS. כעת נבדוק את ריקנות השדה. אם יש בו ערך אזי התגובה נוספה ע”י בוט. אם הוא ריק אזי משתמש רגיל מילא את הטופס.
    החיסרון הוא כמובן בקלות שבה ניתן לדלג מעל המשוכה, ברגע שלמישהו יש אינטרס לעשות זאת.

סגור לתגובות.