View Single Post
ישן 01-08-07, 23:26   # 16
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

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

כשבוט שולח הודעה הוא פשוט עושה 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, יש לך את הדרכים האחרות שהם מקשות.

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