asp.net + אבטחת האתר

asp.net + אבטחת האתר

שאלה בנושא אבטחת האתר: אני בונה אתר asp.net עם דטהבייס MSSQL2000. קריאת הנתונים מהדטהבייס היא רק עם שם וסיסמה, כמובן. קראתי קצת על העניין של שמירת ה ConnectionString: מצד אחד, לשמור את הסטרינג הנ"ל כחלק מה dll המקומפל עדיין מהווה פתח לבעיה, כי אפשר לעשות disassemble ולקבל את הסטרינג. מצד שני: מה הבעיה? אם מישהו הצליח לחדור אל התיקיה שנחשבה "בטוחה", ולהעתיק לעצמו את ה dll ועוד כל מיני קבצים, מה מונע ממנו להיכנס כבר לתוך הדטהבייס ישירות?! כלומר, אם הבטיחות נפרצה, אז אפשר מראש להניח שהיא נפרצה לגמרי, לא? אנא עזרו לי להבין מה המוטיבציה להסתיר כל כך חזק את הסטרינג הזה, כאשר כל דרך שאני מעלה בדעתי שמאפשרת הסתרה של הסטרינג הנ"ל מכילה גם את האפשרות לגלות אותו. למשל, כפי שקראתי ב FAQ יש שרשור בעניין, שבו כל אחד מסביר איך לאבטח את הסטרינג, אבל לא שם לב שהצורה שבה הוא בחר חשופה לחלוטין. גם השיטה שמציע הכותב האחרון בשרשור, sharkyM, חשופה: אם הוא יכול לעשות reflection לקובץ ה dll ולקבל ממנו את הסטרינג, אז כל פורץ יכול גם (ותקנו אותי אם אני טועה כאן). בברכה ובתודה מראש, רון
 

MrProg

New member
איכסון ConnectionString

ראשית קובץ הקונפיג הינו קובץ מאובטח ביסודו IIS לא נותן לגשת לקובץ הזה בשום צורה, אלא אם כן אתה ניגש לקובץ מהמחשב המקומי כך שגם אם תשים את ה-Connection String בתוך web.config לא יוכלו לגשת לקובץ מהאינטרנט לגבי המחשב המקומי - אתה יכול לשים הרשאת admin בלבד על התיקיה בה נמצא קובץ ה-Config. אני אישית מאכסן את ה-ConnectionString בקובץ web.config בצורה מוצפנת ה-Key עצמו מאוכסן בקובץ מוגן אך החשש העיקרי והוא - פריצה דרך הרשת יורד מכיוון שאין גישה לקובץ web.config
 
תגובה

ראשית, תודה על תגובתך. שנית, אם מדובר בפורץ מספיק מתוחכם, אז הוא כבר יכול לפרוץ לרשת הפנימית של החברה המאחסנת, ואז להיכנס גם לתוך ה IIS ולעשות מה שבא לו. והוא יכול גם להיכנס לקובץ המוגן ולקבל את המפתח לפענוח הסיסמה. כך שאמנם נראה לי שזה מקשה עליו, אבל רחוק מלהיות מוגן. שלישית, כפי שכבר אמרתי קודם, מספיק שהפורץ נכנס לרשת הפנימית של החברה המאחסנת, כדי שיגיע ישירות למסד הנתונים, ואז הוא ממש לא צריך את ה ConnectionString שלי, אלא את ה Login של ה Admin. הרעיון היחיד שחשבתי עליו הוא לשמור את הסטרינג בכלל על שרת של חברה מאחסנת אחרת, ובארוע Application_Start לקרוא אותו ולאחסן במשתנה גלובלי. ככה זה יישאר בזכרון של המחשב בלבד, ויהיה הרבה יותר קשה להגיע אליו, אם כי עדיין אפשרי. לכן אני עדיין חושב שההגנה המשמעותית היחידה עבור אחסון ה ConnectionString היא ההגנה שיש לחברה המאחסנת את האתר. יש לקוות שיש שם מערכת הגנה טובה הכוללת FireWall רציני, מערכת הפעלה מוגנת וכו'. אשמח לשמוע תגובות והערות נוספות. בברכה, רון
 

gilad g

New member
תיקון + הערות

1. ה-IIS הוא לא זה שחוסם את הגישה ל-web.config, למען האמת, בשביל ה-IIS, ה-web.config הוא קובץ טקסטואלי רגיל לכל דבר. מה שחוסם את הגישה לקובץ הזה הוא ה-runtime של asp.net (כלומר aspnet_wp.exe). אם, למשל, תסיר את ההתקנה של asp.net מה-iis, תוסר ההגנה, והקובץ יהיה חשוף לעיני כל. 2. מה שכן אפשר לעשות זה לאחסן את ה-connection string (באופן מוצפן או לא) בקובץ שיימצא ספריה מקומית אחרת שאינה נמצאת תחת ה-wwwroot. אני מציע לך להשתמש במנגנון ה-cache של asp.net בכדי לא לטעון אותו כל פעם מחדש.
 
תגובה

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

היא עדיין ממוקמת מתחת ל wwwroot (לפחות באופן וירטואלי). אם הבנתי נכון, אז הרעיון הקודם היה להשתמש בתיקיה אחרת לגמרי, נניח תיקיה בשם ron בכונן C, ואין אליה איזשהו מיפוי מצד ה IIS. ואז לשמור בה את הקובץ שמכיל את הסטרינג. בצורה הזו יש קצת יותר הגנה בפני פריצה לאתר, כי אז פריצות מסויימות לא מגיעות לתיקיות שאינן ממופות ע"י ה IIS.
 

gilad g

New member
מה ש-Admini התכוון לומר,

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

sharkyM

New member
לא קראת את הסיפא של דברי

מכיוון שה-dll החיצוני הוא scrambled, אין אפשרות לבצע עליו reflection.
 
ובכל זאת...

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