לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 29-08-2010, 17:07
  Smile123 Smile123 אינו מחובר  
 
חבר מתאריך: 14.08.10
הודעות: 107
הגנה מפני CSRF

שלום
חיפשתי כאן בפורום ומצאתי את הנושא הזה - http://www.fresh.co.il/vBulletin/sh...ad.php?t=455093

הציעו שם סינון לפי כתובת האתר ממנו נשלחה הבקשה, או אפילו קובץ ספציפי ממנו נשלחה הבקשה.

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


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

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

התחלתי להכין את ההגנה הפשוטה הזו יחסית אבל כל הנתונים אצלי סטטים - שם משתמש, אימייל ושאר דברים דומים.
נתונים שישתנו רק אחת ב... או אולי אפילו אף פעם.
לעומת זאת, במערכת vBulletin בכל ריענון של העמוד נוצר hash אחר, לדוגמה:
ציטוט:
1283093906-78ccd673f2b86b190f1ff65cc58e0aaf3452b9cd
1283093922-a4d415647f07a535614623e45e4d42da119dd235



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

ועכשיו לשאלות:
1. נניח והוספתי ערך דינאמי, כיצד אוכל להשוות את הhash לאחר שליחת הטופס? (אולי באמצעות שמירת הhash במסד? באמצעות סשן? באמצעות קוקיז?) - עדיפה הדרך היעילה ביותר כמובן

2. איזו מהשיטות עדיפה לדעתכם (שדה מוסתר / סינון כתובות)?

תודה!

נערך לאחרונה ע"י Smile123 בתאריך 29-08-2010 בשעה 17:10.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 29-08-2010, 19:40
  משתמש זכר yoavmatchulsky yoavmatchulsky אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 1,561
שלח הודעה דרך ICQ אל yoavmatchulsky שלח הודעה דרך MSN אל yoavmatchulsky Facebook profile
בתגובה להודעה מספר 3 שנכתבה על ידי Smile123 שמתחילה ב "הקישור הזה לא ממש עוזר לי מ2..."

אז טיפה חופרים

קוד PHP:
 483  if ( !function_exists('wp_create_nonce') ) :
 
484  function wp_create_nonce($action = -1) {
 
485      $user wp_get_current_user();
 
486      $uid $user->id;
 
487  
 488      $i 
ceil(time() / 43200);
 
489      
 490      
return substr(wp_hash($i $action $uid), -1210);
 
491  }
 
492  endif;
 
493  
 494  
if ( !function_exists('wp_salt') ) :
 
495  function wp_salt() {
 
496      $salt get_option('secret');
 
497      if ( empty($salt) )
 
498          $salt DB_PASSWORD DB_USER DB_NAME DB_HOST ABSPATH;
 
499  
 500      
return $salt;
 
501  }
 
502  endif;
 
503  
 504  
if ( !function_exists('wp_hash') ) :
 
505  function wp_hash($data) {
 
506      $salt wp_salt();
 
507  
 508      
if ( function_exists('hash_hmac') ) {
 
509          return hash_hmac('md5'$data$salt);
 
510      } else {
 
511          return md5($data $salt);
 
512      }
 
513  }
 
514  endif;
 
515  
 516  ?>
 


מה שוורדפרס עושה זה לכל טופס היא מצרפת שדה נסתר שהוא HASH של כמה דברים - ID של היוזר, חתימת זמן כלשהי (בכפולות של חצי יום) ומחרוזת כלשהי שאתה מעביר לה (למשל - הid של הטופס).
את כל זה היא מחברת ל SALT שבנוי מהנתוני דאטאבייס ועוד סיסמא סודית שאתה מגדיר בהגדרות של הוורדפרס.

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

את הHASH אפשר גם להעביר ב URL של הטופס. אבל זה כבר תלוי איך אתה בונה את זה.
_____________________________________
!!אזהרה!!
ההודעה עלולה להכיל שברי אגוזים ו/או איברי דגים כלשהם
!!אזהרה!!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 30-08-2010, 08:17
  Smile123 Smile123 אינו מחובר  
 
חבר מתאריך: 14.08.10
הודעות: 107
בתגובה להודעה מספר 6 שנכתבה על ידי ישראל K שמתחילה ב "1. רק Session, אין פה אף מקום..."

בנוגע לסשן, זה באמת נשמע הכי יעיל אבל -

ציטוט:
חשוב להבהיר כי המידע של המשתמש נשמר ב-session על השרת (בקובץ ה-session), וכל משתמש מקושר לקובץ ה-session הייחודי שלו לפי ה-session id (מספר הזיהוי) הייחודי שלו. ה-session id לא מאובטח בצורה טובה כשמשתמשים רק ב-sessions, ומשתמש אחר יכול "לגנוב" לך את מספר הזיהוי שלך, ולהשתמש בקובץ ה-session שלך! זאת הסיבה שלא ממש כדאי להעביר את ה-session id דרך ה-URL, כי זה פרוץ מדי. לעומת זאת, שמירת ה-session id בתוך עוגיה מקשה יותר על גניבת מספר הזיהוי שלך, אך לא מונעת את זה בוודאות. החיסרון של שימוש בעוגיות לשמירת ה-session id, הוא שהעוגיה יוצאת מתוקף רק כאשר סוגרים את הדפדפן (בדר"כ, תלוי בקונפיגורציה). לכן אם משתמש נכנס לאתר מסויים שעושה שימוש ב-session ויוצא ממנו, ונכנס שוב לאותו אתר דרך אותו הדפדפן (הכוונה היא שהוא לא סגר את הדפדפן ופתח אותו מחדש), אפילו לאחר שביקר בכמה אתרים נוספים, הוא ישתמש באותו session id, וכנראה שגם באותו קובץ ה-session שלו מהפעם הקודמת שביקר באתר (במידה וקובץ ה-session שלו עדיין בתוקף). כדי להגביר את האבטחה על ה-sessions, לא רק העוגיה של ה-session id יוצאת מתוקף, אלא גם קובץ ה-session על השרת "מתיישן" ויוצא מתוקף לאחר זמן מה (תלוי בקונפיגורציה).


(מתוך http://php.eitan.ac.il/main.php?id=00169)

הוא לא נתן שם דוגמאות איך באמת אפשר "לגנוב" את הסשן ולכן אני לא יודע אם זה באמת כזה נורא כמו שהוא מציג את זה או שיש אפשרויות לחסום את זה בדרכים אחרות?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 30-08-2010, 10:00
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 7 שנכתבה על ידי Smile123 שמתחילה ב "בנוגע לסשן, זה באמת נשמע הכי..."

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

תשים לב לדברים אלו:
(אני כותב את הדברים כפי שהם, לא מתוך הציטוט לעיל, כך שאין בהכרח לצפות לעקביות בדברים)
1. תכונות בסיסיות של סשן הם: א. יצירת קובץ סשן בשרת, בו נשמרים הנתונים. ב. שליחת קוד הסשן ללקוח (ע"מ לזהות בבקשה הבאה איזה קובץ סשן שלו).
2. שליחת קוד הסשן ללקוח יכולה להעשות באחת משתי דרכים אלו: א. כמשתנה בשורת הכתובת. ב. בעוגיה.
3. אפשר לגנוב קוד סשן וע"י כך כמובן להזדהות מול השרת כבעל הסשן.
4. גניבת הסשן קלה הרבה יותר כאשר קוד הסשן מועבר בשורת הכתובת, מאשר כשקוד הסשן מועבר בעוגיה.
5. הפתרון לבעיית קלות גניבת קוד הסשן כשהוא מועבר בשורת הכתובת, הוא כמובן להקפיד להעביר את קוד הסשן בעוגיה.
6. הפתרון לבעיית גניבת קוד הסשן - גם כשהקוד נשמר כעוגיה (הגם שפעולה זו -כפי שנאמר לעיל- כבר מעט קשה יותר מאשר לו קוד הסשן היה מועבר באמצעות שורת הכתובת), הוא להוסיף אמצעי זיהוי נוסף לקוד הסשן ולאמת את מוסר קוד הסשן גם באמצעות כתובת IP (שאוכסנה בסשן בזמן יצירת קובץ הסשן). בנוסף, הקפדה על משך זמן סביר עבור אי מחיקת קובץ הסשן, גם מוסיפה מימד כלשהו של אבטחה, כיון שנשאר לפורץ פחות זמן פעולה.

לסיכום:
1. כפי שציינתי, לא היה פה כלל מקום לדיון, בדיוק לשם כך מיועד הסשן, וגם אם במערכת גדולה כלשהו לא היו משתמשים באופן זה, עדיין זו התשובה הנכונה, כך שממש אין מקום לדיון.
2. יש בעיה שניתן לגנוב את הסשן? ישנן פתרונות פשוטים לטיפול בבעיה זו.

נערך לאחרונה ע"י ישראל K בתאריך 30-08-2010 בשעה 10:16.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 03-09-2010, 14:25
  Smile123 Smile123 אינו מחובר  
 
חבר מתאריך: 14.08.10
הודעות: 107
בתגובה להודעה מספר 1 שנכתבה על ידי Smile123 שמתחילה ב "הגנה מפני CSRF"

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

אז השאלה הנשאלת היא - איך אני יכול להשוות בין הערכים?

הרי לאחר שליחת הטופס נוצר שוב HASH חדש והערך שנשלח בשדה החבוי (HIDDEN) יהיה שונה מהHASH החדש שנוצר בסשן - ולכן אין אפשרות להשוות בניהם.

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

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

רעיונות כלשהם?

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

אני צודק?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 05-09-2010, 00:05
צלמית המשתמש של Eran
  משתמש זכר Eran Eran אינו מחובר  
 
חבר מתאריך: 27.02.02
הודעות: 4,536
שלח הודעה דרך ICQ אל Eran
בתגובה להודעה מספר 10 שנכתבה על ידי Smile123 שמתחילה ב "טוב אז יש לי בעייה קטנה. נניח..."

ציטוט:
במקור נכתב על ידי Smile123

הרי לאחר שליחת הטופס נוצר שוב HASH חדש והערך שנשלח בשדה החבוי (HIDDEN) יהיה שונה מהHASH החדש שנוצר בסשן - ולכן אין אפשרות להשוות בניהם.


אז זהו שלא.
אתה יוצר את ה HASH פעם אחת. ומאז ההש סטטי.
הוא נשמר בשרת ואצל המשתמש.

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

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

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


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

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://fresh.clanteam.com/list.png]

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://fresh.clanteam.com/?https://2010-uploaded.fresh.co.il/2010/09/21/52868411.gif,http://www.boredpanda.com/blog/wp-content/themes/mimbo2.2/images/subscribe-panda-605px.png]

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 18:59

הדף נוצר ב 0.07 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר