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

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

DevZone.co.il 15-01-07 15:09

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

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

אשמח לשמוע על עוד.
תודה ויום טוב.

Eli-Hai 15-01-07 15:13

להצפין סיסמאות של משתמשים (במידה ומדובר על משתמשים שכלולים באתר)...

ShoQER 15-01-07 15:21

למנוע התקפות SQL...

להגביל את המשתמש בנתונים מסויימים...

לבדוק כל צעד של המשתמש שהוא לא חריג במקרה...וכו'..

nevo 15-01-07 16:23

לבדוק שאין חור אבטחה ששולחים לך POST מדף במחשב.

sUP 15-01-07 19:04

htmlspecialchars
mysql_real_escape_string

ואם התוכן שאמור להכנס לעמוד לדוגמא page?id=5
אז לבדוק ש ID הוא באמת מספר בעזרת is_numeric

ממ זה בעיקרון מה שאני ושה

WebProject 15-01-07 19:07

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

פונקציות שימושיות:

http://php.net/mysql_real_escape_string
http://php.net/htmlspecialchars
http://php.net/stripslashes

בהצלחה :]

Eli-Hai 15-01-07 19:49

מה סלאשים יכולים לעשות? :\

CodeX 15-01-07 19:53

כל מה שצריך זה למנוע XSS, יש פונקציה בשם htmlspecialchars =]

Valid 15-01-07 20:23

ציטוט:

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

פונקציות שימושיות:

http://php.net/mysql_real_escape_string
http://php.net/htmlspecialchars
http://php.net/stripslashes

בהצלחה :]


אין שום סיבה לשמור 2 עוגיות, אחת למס' \ שם משתמש והשנייה לסיסמה

אני אישית לא שומר שום דבר שקשור לסיסמה (גם אחרי 5 הצפנות) בקוקי, תאמין לי שכל הצפנה אפשר לשבור (אם זה MD5, SHA1, וכו').

eLad 15-01-07 20:25

ציטוט:

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

פונקציות שימושיות:

http://php.net/mysql_real_escape_string
http://php.net/htmlspecialchars
http://php.net/stripslashes

בהצלחה :]

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

Eli-Hai 15-01-07 20:30

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

eLad 15-01-07 20:32

ציטוט:

נכתב במקור על ידי Eli-Hai (פרסם 406489)
דרושים המון משאבים כדי לפענח את MD5, ואם תצפין אותה 5 פעמים, אתה תקשה עוד ועוד. ואנשים יתעייפו מלנסות לפענח, ולפענח ולפענח.

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

וזה לא משנה כמה הצפנה על הצפנה תעשה. MD5 זה גיבוב. לא הצפנה (אפילו אין מפתח). הרי יכול להיות שהגיבוב של "12345" והגיבוב של "elad" הוא אותו אחד בדיוק..

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

Eli-Hai 16-01-07 14:11

ציטוט:

נכתב במקור על ידי eLad (פרסם 406493)
ונראה לך שזה כזה פשוט לשרת להצפין את זה 5 פעמים וכל פעם שהוא בודק את ערכי העוגייה מול מסד זה עוד 5 פעמים הצפנה?

וזה לא משנה כמה הצפנה על הצפנה תעשה. MD5 זה גיבוב. לא הצפנה (אפילו אין מפתח). הרי יכול להיות שהגיבוב של "12345" והגיבוב של "elad" הוא אותו אחד בדיוק..

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

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

tnadav 16-01-07 14:25

ציטוט:

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

זה פתרון דווקא בסדר גמור.
אם תהיה לנו עוגיה אחת שמכילה שם משתמש, כל אחד יכול לשנות את השם משתמש ל- Admin, והנה המערכת נפרצה ב.. חצי דקה?
אבל.. אם יש לנו עוגיה אחת משתמש ועוגיה אחת סיסמא, ומן הסתם בודקים אם השם משתמש והסיסמא נכונים, הפורץ צריך לדעת את הסיסמא בשביל לפרוץ.
הבעיה היחידה פה, היא, שיש חור ל- Brute Force, ואת זה אי-אפשר לחסום, בניגוד ל- LOGIN רגיל.
לכן, הנה מה שאני עושה:
במסד נתונים, טבלה בשם SESSIONS ושם יש ID מוצפן של SESSION, וסיסמא ל- SESSION ושם משתמש של המשתמש וסיסמא של המשתמש, ואז בעוגיה יש רק ID מוצפן של SESSION וסיסמא של SESSION והמידע על העוגיה, בכלל לא רלוונטי (אפשר לגנוב עוגיות, אבל את זה אפשר לחסום ע"י הגבלת IP של SESSION)
ואז בכלל אפשר לשלב את זה עם סטטיסטיקה וכו'..

DevZone.co.il 16-01-07 16:13

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

Eli-Hai 16-01-07 16:43

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

$query = mysql_query("SELECT * FROM `members` WHERE `id` ='" . $_COOKIE["id"] . "' AND `password` ='" . $_COOKIE["password"] . "'");

$login_status = mysql_num_rows($query);

if( !isset($_COOKIE["password"]) OR !isset($_COOKIE["password"]) OR $login_status !== 1 )
header("location:index.php?login");


eLad 19-01-07 19:53

ציטוט:

נכתב במקור על ידי tnadav (פרסם 406845)
זה פתרון דווקא בסדר גמור.
אם תהיה לנו עוגיה אחת שמכילה שם משתמש, כל אחד יכול לשנות את השם משתמש ל- Admin, והנה המערכת נפרצה ב.. חצי דקה?
אבל.. אם יש לנו עוגיה אחת משתמש ועוגיה אחת סיסמא, ומן הסתם בודקים אם השם משתמש והסיסמא נכונים, הפורץ צריך לדעת את הסיסמא בשביל לפרוץ.
הבעיה היחידה פה, היא, שיש חור ל- Brute Force, ואת זה אי-אפשר לחסום, בניגוד ל- LOGIN רגיל.
לכן, הנה מה שאני עושה:
במסד נתונים, טבלה בשם SESSIONS ושם יש ID מוצפן של SESSION, וסיסמא ל- SESSION ושם משתמש של המשתמש וסיסמא של המשתמש, ואז בעוגיה יש רק ID מוצפן של SESSION וסיסמא של SESSION והמידע על העוגיה, בכלל לא רלוונטי (אפשר לגנוב עוגיות, אבל את זה אפשר לחסום ע"י הגבלת IP של SESSION)
ואז בכלל אפשר לשלב את זה עם סטטיסטיקה וכו'..

שוב אני חוזר על השאלה - למה שתי עוגיות?
בעוגיה אחת אי אפשר להכניס 2 פרמטרים לבדיקה? אי אפשר להכניס 3 ו 4 פרמטרים? אפשר להכניס גם מיליון פרמטרים עד ההגבלה של 4KB לעוגייה. תאמין לי שלא פשוט להגיע לזה..

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

ציטוט:

נכתב במקור על ידי Eli-Hai (פרסם 406834)
כשאתה משתמש בסיסמאות סטנדרטיות, אז אולי.
אם למשל אתה משתמש בקוד שמסמל בעבורך משהו - מספר טלפון, תאריך לידה ומספרים שלא כולם משתמשים בהם, הסיכוי שאיזה מנוע של האשים יכיל את הסיסמא המוצפנת והלא מוצפנת הוא סיכוי של 1 למיליון לדעתי.

לא רק בנוגע לסיסמאות סטנדרטיות אלא גם אם תיקח מאמר שלם ותגבב אותו, יכול להיות שהפלט שלו יהיה הפלט של המילה "password". שתדע לך, יש מחשבי על שרצים 24/7/365 במטרה לפצח צפנים מסוג זה ולמצוא עוד מספרים ראשוניים. אשמח לראות את החישוב של 1 למיליון (;P).

DevZone.co.il 19-01-07 20:04

דקה, אז מה כדאי לעשות?
ליצור עוגייה אחת שמה היא מכילה סיסמה ושם משתמש?
ואז לעשות אימות העוגייה עם הסיסמה ושם המשתמש?
ואיך אני מכניס שני ערכים לעוגייה אחת?
תודה.

Eli-Hai 19-01-07 20:07

עוגיה 1: Username
עוגיה 2: Password (md5 hash)

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

tnadav 19-01-07 21:23

ציטוט:

נכתב במקור על ידי eLad (פרסם 408684)
שוב אני חוזר על השאלה - למה שתי עוגיות?
בעוגיה אחת אי אפשר להכניס 2 פרמטרים לבדיקה? אי אפשר להכניס 3 ו 4 פרמטרים? אפשר להכניס גם מיליון פרמטרים עד ההגבלה של 4KB לעוגייה. תאמין לי שלא פשוט להגיע לזה..

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


לא רק בנוגע לסיסמאות סטנדרטיות אלא גם אם תיקח מאמר שלם ותגבב אותו, יכול להיות שהפלט שלו יהיה הפלט של המילה "password". שתדע לך, יש מחשבי על שרצים 24/7/365 במטרה לפצח צפנים מסוג זה ולמצוא עוד מספרים ראשוניים. אשמח לראות את החישוב של 1 למיליון (;P).

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

WebProject 20-01-07 10:35

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

tnadav 20-01-07 12:10

ציטוט:

נכתב במקור על ידי WebProject (פרסם 408890)
הוא התכוון שאתה יכול להכניס את הנתונים של שני הנתונים לעוגייה אחת ולשים סימן מפריד בין שני הנתונים, כך לפחות אני אני משתמש ברוב האתרים שאני בונה שיש בהם משתמשים, התגובה שלי לפני הייתה קצת מביכה |Rolleyes|

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

omercnet 20-01-07 12:56

ציטוט:

נכתב במקור על ידי eLad (פרסם 406493)
ונראה לך שזה כזה פשוט לשרת להצפין את זה 5 פעמים וכל פעם שהוא בודק את ערכי העוגייה מול מסד זה עוד 5 פעמים הצפנה?

וזה לא משנה כמה הצפנה על הצפנה תעשה. MD5 זה גיבוב. לא הצפנה (אפילו אין מפתח). הרי יכול להיות שהגיבוב של "12345" והגיבוב של "elad" הוא אותו אחד בדיוק..

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

אתה חי בסרט.
אחוזי collision של MD5 הם אפסיים, ועד היום לא הצליחו ליצור משהו שייצר לך מחרוזת שמחזירה את אותו checksum
מה שיש זה רק rainbow tables ולא לכל ילד יש כאלה, וזה עוד רק אחרי שנכנסים לך לDB ולוקחים את זה..

MD5 מספיק ביותר.

BlueNosE 20-01-07 18:47

ציטוט:

נכתב במקור על ידי omercnet (פרסם 408943)
אתה חי בסרט.
אחוזי collision של MD5 הם אפסיים, ועד היום לא הצליחו ליצור משהו שייצר לך מחרוזת שמחזירה את אותו checksum
מה שיש זה רק rainbow tables ולא לכל ילד יש כאלה, וזה עוד רק אחרי שנכנסים לך לDB ולוקחים את זה..

MD5 מספיק ביותר.

אולי שכחת אבל היום הסיסמאות הם לא "דג קטן שט לו בים זך אך לפתע מצב חבורה נחמדה שצצה כך", אלא "dsl308" או "mao01MA" וכדומה.
הסיכוי לפרוץ את זה עם RAINBOW TABLES יותר גבוה, והפריצה אפשרית עם בדיקה ברוטלית פשוטה של CAIN.


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

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