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

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

SmsBanner.net 23-06-07 16:04

אבטחת עוגיות
 
שלום,
מה הדרך הבטוחה והיעילה ביותר לאמת נתוני משתמש (או שאולי נכון יותר לומר לאבטח עוגיות?..)?

אני רוצה שמשתמש שמתחבר לאתר שלי, יוכל לחזור לאתר לאחר זמן מה והמערכת תזהה אותו למרות שיצא ממנו כבר.
האם כדאי להשתמש בעוגיות? אולי ב SESSIONS? אולי לשלב?

אשמח לקרוא את דעתכם בנושא.
בנוסף אשמח לקבל קישורים למקורות מידע בנושא.

תודה,
איגור

חיים 23-06-07 16:19

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

SmsBanner.net 23-06-07 16:35

ציטוט:

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

תודה חיים,

השאלה היא איך לבצע את זה בצורה כזו שהעוגיה תהיה מאובטחת ושהסיכוי לגנוב אותה יהיה כמה שיותר נמוך?

Daniel 23-06-07 16:38

לוח בקרה של משהו שקשור בכסף?
סשנס, בלי שום היסוס.


סשנס שנשמרים למקסימום שעתיים + IP = מצויין.


במקרה שזה לא קשור למשהו -ממש- רציני, תשתמש בקוקיס עם ID + הסיסמה המוצפנת בהצפנה חד צדדית + מספר התחברות.
אם אתה ממש רוצה, אתה מוזמן להצפין את זה 4 פעמים ב-MD5, במקום רק פעם אחת, וכך לבדוק WHERE id = 'Cookie ID', ולבדוק האם ה-md5(md5(md5($row['pass))) שווה לקוקיס password.

למרות שאולי זה יאריך את הטעינה של הדף במאית שניה.

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

כל פעם זה משווה את הכל, זה דמוי סשן.

mlnn 23-06-07 16:46

אם אתה לא רוצה שיגנבו למשתמשים שלך עוגיות, אל תשאיר מקום לXSS.
עריכה:

אני רואה אני לא קשור :P
תשמור בקוקי userName + MD5.

MasterT,
למה לו לשמור מספר התחברויות? או שזה מספר התחברות? [מה זה?]

LosNir 23-06-07 16:51

אני מצאתי דרך ממש נחמדה:

כל פעם שאתה מתחבר והאפשרות של לזכור מסומנת אז נכנסת למסד שורה, השורה כוללת 4 ערכים:

ID, שם משתמש, סיסמא ו string

ה string זה אותיות רנדומאליות שנוצרות בהתחברות ,את ה string שיצא אתה מכניס לעוגיה.

בהתחברות, אם העוגיה קיימת תשלוף את ה string ותבדוק אם הוא קיים במסד.
אם לא, תציג התחברות.
אם כן, תשלוף את השם משתמש והסיסמא שבמסד ותאמת אותם.

אם הם לא נכונים (מה שרוב הסיכוים שהם כן נכונים) תציג התחברות.
אם הם כן נכונים סיימנו ואתה יכול להרשות למשתמש להכנס לפאנל.

* ה string כולל אותיות גדולות, קטנות, סימנים ומספרים.

SmsBanner.net 23-06-07 17:03

ציטוט:

נכתב במקור על ידי LosNir (פרסם 505430)
אני מצאתי דרך ממש נחמדה:

כל פעם שאתה מתחבר והאפשרות של לזכור מסומנת אז נכנסת למסד שורה, השורה כוללת 4 ערכים:

ID, שם משתמש, סיסמא ו string

ה string זה אותיות רנדומאליות שנוצרות בהתחברות ,את ה string שיצא אתה מכניס לעוגיה.

בהתחברות, אם העוגיה קיימת תשלוף את ה string ותבדוק אם הוא קיים במסד.
אם לא, תציג התחברות.
אם כן, תשלוף את השם משתמש והסיסמא שבמסד ותאמת אותם.

אם הם לא נכונים (מה שרוב הסיכוים שהם כן נכונים) תציג התחברות.
אם הם כן נכונים סיימנו ואתה יכול להרשות למשתמש להכנס לפאנל.

* ה string כולל אותיות גדולות, קטנות, סימנים ומספרים.


מה הרעיון מאחורי זה?
תמיד הנתונים יהיו זהים.. תמיד המשתמש יהיה רשאי להכנס...
ולא עשינו בזה כלום..

Daniel 23-06-07 17:09

דווקא לא....,
זה בערך מה שאני אמרתי.

זה דמוי סשן.

SmsBanner.net 23-06-07 17:12

אני אשאל את השאלה שלי אחרת,
איך אתם [בעלי האתרים] מאמתים את פרטי המשתמשים שלכם?

LosNir 23-06-07 17:13

ציטוט:

נכתב במקור על ידי SmsBanner.net (פרסם 505445)
מה הרעיון מאחורי זה?
תמיד הנתונים יהיו זהים.. תמיד המשתמש יהיה רשאי להכנס...
ולא עשינו בזה כלום..

מה הקשר?

סטרינג רנדאומלי אמרתי.

SmsBanner.net 23-06-07 17:16

ציטוט:

נכתב במקור על ידי LosNir (פרסם 505453)
מה הקשר?

סטרינג רנדאומלי אמרתי.

ומה קורה כשהעוגיה פגה? הנתונים במסד נשארים?

Daniel 23-06-07 17:17

כל התחברות, זה מוחק את כל הסשנס שהם יותר מ-X זמן+אם הסשן פג תוקפו, זה מנתק אותך.

LosNir 23-06-07 17:25

ציטוט:

נכתב במקור על ידי SmsBanner.net (פרסם 505455)
ומה קורה כשהעוגיה פגה? הנתונים במסד נשארים?

cronjob שמוחק שורות שנשארו יותר מהזמן שקבעת.
בשביל זה צריך להוסיף עוד שדה שבו יהיה מתי השורה נוספה.

Daniel 23-06-07 17:27

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

LosNir 23-06-07 17:30

ציטוט:

נכתב במקור על ידי MasterT (פרסם 505462)
זה סתם יקח שאילתות מיותרות כל כמה זמן לעשות את זה-ואם האתר לא פעיל?
עדיף בכל התחברות, זה מוחק את כל מה שפג תוקף.

גם אפשרי.

SmsBanner.net 23-06-07 17:38

אוקי תודה,
ברשותכם אני אנסה לסכם:

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

נשמע טוב :)

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

LosNir 23-06-07 17:48

ציטוט:

נכתב במקור על ידי SmsBanner.net (פרסם 505475)
אוקי תודה,
ברשותכם אני אנסה לסכם:

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

נשמע טוב :)

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

מוסיפים שורה.. למה שיתעדכן?

The Crow 24-06-07 00:52

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

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

בהצלחה גורוש ;)

Eran-s 24-06-07 01:03

ציטוט:

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

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

בהצלחה גורוש ;)

זה מה שבעצם ניר הסביר...

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

Daniel 24-06-07 12:10

ציטוט:

נכתב במקור על ידי Eran-s (פרסם 505799)
זה מה שבעצם ניר הסביר...

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

אפשר להוסיף לזה עוד משתנים רנדומאליים, או משהו כמו:

PHP קוד:

$str $username.substr(0strlen(md5($password) - 16), $password).mt_rand(0,9999);
$str substr(016md5($str)); 

מה דעתכם?


ציטוט:

זה מה שבעצם ניר הסביר...
מהנה להיות עז.


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

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