שחר.נט

שלי...

בלוגים שאני קורא

ספרים מומלצים

July 2009 - Posts

עבודה עם קובץ trc

כאשר עובדים עם profiler ניתן לייצא את הנתונים (וכך בד”כ עושים) לקובץ trc. במידה ורוצים לעבוד מול קבצי trc בקלות (בלי צורך בכל ה performance tools), ניתן לעבוד מולם באמצעות שאילתות TSQLפשוטות, בדיוק כמו טבלה. לצורך העניין, ניתן להשתמש ב fn_trace_gettable שמקבלת את שם הקובץ ומספר המסמן את כמות הקבצים שצריך לקרוא.

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

SELECT textdata,applicationname,duration,CPU 
FROM ::fn_trace_gettable(('c:\startup.trc'),default)
WHERE duration is not null and textdata is not null
ORDER BY duration DESC

.csharpcode, .csharpcode pre { font-size: small; text-direction: ltr; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

בהצלחה.

התמודדות עם העלאת תוכן גולשים ברמת הגדרות השרת

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

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

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

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

בעוד שלאפליקציית ASP.NET רגילה נדרשות מעט מאד הרשאות בשביל לרוץ (בד”כ מספיק Read), לתיקייה הספיציפית אליה מועלים הקבצים נרצה לתת הרשאות Write בנוסף, מסיבות מובנות. לשם כך, צריך לתת הרשאות לחשבון Network Service ב IIS6 (בעבר זה היה בחשבון ASPNET). אם הפעלתם את  אפשרות ה impersonate, אז במידה ומשתמש אנונימי זה יהיה המשתמש IUSR (המשתמש האנונימי של IIS). כדי לעשות את זה, פשוט ב properties של התיקייה, תוודאו שאין ירושה של הרשאות מתיקיות האב ותגדירו את ההרשאות המתאימות רק ליוזרים הנחוצים.

השלב הבא, הוא להגדיר ב iis. הצילומי מסך פה הם מ IIS6 – מטעמי נוחות. דרך ה IIS Manimageagement Console (בקיצור, inetmgr), לכו ל website של האתר שלכם, הקליקו ימנית בנחישות על התיקייה בה יהיו הקבצים של המשתמשים, בחרו ב properties ובטאב Directory במקטע Application Settings תלחצו על Create. בשלב הזה למעשה הפרדתם את התיקייה הזאת ל”אפליקציה” נפרדת, ככה שיהיה אפשר להגדיר לה הגדרות שונות בצורה ספיציפית.

בנוסף, באותו המקום, יש להגדיר ב Execute premissions כ- None. בסופו של דבר, שום דבר לגיטימי לא יכול לרוץ מהתיקייה הזאת.

 

לאחר מכן, לחצ על הכפתור Configuration הנמצא באותו מקום. בחלון שנפתח, הטאב הראשון (שפתוח אוטומטית) הוא Mappings. למעשה, יש שם את המיפוי של סיומות הקבצים השונות ל ISAPI Extension המתאים (במילים אחרות – המנוע שאחראי להריץ אותם). ייתכן שבאפליקציה שלכם יש שימוש ב ISAPI’s שונים משלכם, או שאתם משתמשים בדיפולט – בכל מקרה, אין שום דבר שאתם באמת רוצים שירוץ מהתיקייה הזאת. אז פשוט תעשו Remove לכולם.

כעת, לאחר שהגדרתם את כל ההגדרות כפי שכתבתי, אם מישהו ינסה להיכנס לקובץ asp או aspx או כל קובץ אחר שמכיל סקריפט זדוני שלו שאיכשהו מצא את מקומו בתיקייה הזאת – זה פשוט לא יעבוד. קבצי ASP יחזירו שגיאת 404 (ליתר דיוק 404.2) וקבצי ASP.NET פשוט לא יפורשו ויוחזרו איך שהם ל client. בצורה הזאת, גם אם מישהו יצליח להעלות איזשהו shell דרך מנגנון העלאת הקבצים שלכם, הוא לא יצליח להריץ אותו.

בהצלחה.