הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   בוטים-כיצד לחסום אותם(שאלה). (https://hosts.co.il/forums/showthread.php?t=50998)

נמרוד 31-07-07 18:30

תכריח לפני הודעה באנגלית לכתוב בעברית [אנגלית] או שתכריח לכתוב לפחות אות אחת בעברית/ תספור את הזמן שלוקח למשתמש לכתוב את ההודעה. זה מה שלה לי בראש.. זה די מסובך (הזמן) אבל נראה לי רע.

Daniel 01-08-07 12:28

חצי מהתגובות כאן הם פשוט ללא שום מחשבה.

הראשון הציע, בסדר, אמרתי לו שזה אמור להיות "עמוד תגובות", זה לא פורום.

השני, מילא.

אבל כש-5 אנשים מציעים אותו רעיון?


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

Eran-s 01-08-07 22:46

אני כמה וכמה פעמים השתמשתי בדבר כזה:
בתוך התנאי שאם הטופס נשלח אתה רושם תנאי חדש שבודק אם ה-HTTP_HOST שווה למחרוזת מארח ב-HTTP_REFERER.
כמובן שתעשה בדיקה גם עם החלפת www.

Meir 01-08-07 22:49

אפשרי לזייף את הHTTP_REFERER בקלות אם אני לא טועה.

Eran-s 01-08-07 22:53

ציטוט:

נכתב במקור על ידי elbaz.maor (פרסם 534154)
אפשרי לזייף את הHTTP_REFERER בקלות אם אני לא טועה.

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

RS324 01-08-07 23:26

עוד רעיון נחמד שיכול להיות מועיל ואולי הכי פשוט מכולם.

כשבוט שולח הודעה הוא פשוט עושה POST לדף מהתוכנה שעליה הוא מוגדר.

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

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

הרעיון הוא שכל פעם גם השם של השדה וגם ה VALUE שלו משתנים ככה אי אפשר לעלות על זה

כלומר נעשה :

PHP קוד:

$fieldname uniqid(rand(0,100));
$fieldvalue uniqid(rand(0,100)); 

בשביל לייצר מחרוזות ראנדומליות.

ואז נעשה כזה דבר :

PHP קוד:

echo '<input type="hidden" name="'.$fieldname.'" value="'.$fieldvalue.'" />'

בשביל להציג את זה כחלק מהטופס.

כשאנחנו עושים _POST
אז נעשה את הבדיקה הפשוטה :
if ((!isset($_POST[$fieldname])) OR ($_POST[$fieldname] != $fieldvalue))
{
die('POST NOT ALLOWED');
}

כשאתה עושה את זה יש לך בעיה שבריענון של הדף אז ה VALUE כל הזמן משתנה
ולכן נשתמש ב SESSION בשביל לשמור את זה על המשתמש
כאשר מה שנשמר על המשתמש הוא ה SESSIONID שלא אומר כלום לגבי ה NAME ו VALUE
שיש בFORM.

בנוסף הייתי ממליץ לך להגן על ה SESSION מפני גניבות, וגם לוודא HTTP_USERAGENT
נכון שלא בעיה להמציא AGENT אבל בד"כ בוטים משתמשים ב AGENT קבוע שלא תהיה לך בעיה לחסום אותו, גם אם הם ישנו את ה AGENT, יש לך את הדרכים האחרות שהם מקשות.

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

Daniel 02-08-07 17:12

תודה רבה לכולם, ושיפרתי את הכל, מקווה שזה יעצור אותם :)
אפשר לנעול.


כל הזמנים הם GMT +2. הזמן כעת הוא 17:06.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ