שאלה ב-c

erezsh

New member
לא יודע בקשר לכל הנתונים הללו

אבל אני כן יודע שעד לפני שנה/שנתיים Apache היה אחוז קטן מאוד מהשוק. את IIS כבר חרשו, אז מן הסתם מתמידים בו אפילו אם הוא נהפך לאחרונה לפחות נפוץ (ואני לא בטוח בקשר לנתון הזה בכל מקרה).
 

OriIdan

New member
מה פתאום?

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

neko

New member
שתי הערות קטנות:

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

OriIdan

New member
הערות להערות

במערכות משובצות מחשב של היום הפונקציונליות אמנם יותר מוגבלת מ PC אבל בעיות אבטחה יכולות להיות באותה מידה מאחר והפונקציונליות די מורכבת. אלו בכל מקרה לא הדברים היחידים שתכנתתי. לגבי בדיקת מקום לפני העתקת string נדמה לי שזה כתוב אפילו ב K & R כך שזה ידוע מהרגע שהשפה הומצאה. הנושא של Buffer overflow ידוע עוד מהרגע שהמציאו את התכנות ולכן זו לא בעיה חדשה שהרבה קוד נכתב לפני שהבינו שיש בעיה כזו, את הבעיה הזו מבין כל ילד שמתחיל לתכנת ב Assembly לכן נדהמתי לשמוע שבעיה כזו קיימת בחלונות, תוכנה שיש בה בעיות כאלו זה אומר או שנעשה כאן תכנות ללא מחשבה או שהמתכנת הוא גרוע מאד או שניהם גם יחד. לדעתי חוסר המחשבה נובע מהרצון להוציא לשוק תוכנה כמה שיותר מהר בלי קשר לאיכות כי הרי מה שמוכר זה הפירוטכניקה ולא האיכות אז הורו למתכנתים לתת כמה שיותר פירוטכניקה כמה שיותר מהר, בכל מחיר, מאחר וגם כך אף אחד לא רואה את הקוד אז גם למתכנת לא ממש איכפת.
 

Zack DA

New member
חלונות בנויה ללא אבטחה ? ../images/Emo6.gif

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

OriIdan

New member
אז זהו שרק עכשיו מוסיפים את ההקשחה

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

DNile

New member
אתה רציני?

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

erezsh

New member
לכן,

כתבתי: "אלא אם כן אתה כותב תוכנה מקצועית, או תוכנה הדורשת security." יא פנאט
 

galh

New member
זה בכלל לא להיות פנאטי!

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

erezsh

New member
אתם רציניים?!

למה שאני לא אשתמש ב-gets עבור תוכנות בדיקה שאני כותב עבור עצמי?? פאנאטיות זה בדיוק מה שגורם למתכנתים לכתוב במשך שבוע קוד שאפשר לכתוב ביום, בלי שום סיבה. דוגמא מהחיים - במקום לעשות אלוקציה בזיכרון של משהו כמו 50 מגה, מישהו החליט לעשות הכל בעזרת caches ו-pages על ההארד-דיסק. כמובן שזה הרבה יותר טוב כאשר הקלט יעלה על 50 מגה, אבל ידוע שבעתיד הקרוב זה לא יקרה כלל! אז לקח לו שבועיים לכתוב משהו שסיימתי בפחות מיומיים, וכל המנגנונים המתוחכמים שלו בכלל לא בשימוש. אה, ו- fopen זו פונקציה מעולה. אשמח לדעת מה לדעתכם כ"כ נורא בה.
 

OriIdan

New member
באמת למה לא?

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

vinney

Well-known member
שימוש בFOPEN ב++C

פשוט פוגם בעקרונות הOOP, זה הכל. אם אתה כותב תוכנה שהיא לא OOP ב++C, אז אין שום רע להשתמש בFOPEN. הבעיה עם GETS שונה, היא לא בוקדת הקצאות זכרון קודמות ויכולה לזבל לך זכרון, אם לא הקצאת מספיק, ולכן השימוש בה בעייתי (כי הרי אתה לא יכול לדעת מראש כמה צריך להקצות, לא?). קצת לא ברור לי אבל איך FGETS פותרת את הבעיה הזאת, היא יכולה להפטר רק על ידי Xscanf, שם אתה אומר בפרמטרים מה גודל המערך שהקצאת (לא חייבים, ואז חוזרים להתחלה
)
 

erezsh

New member
אתה טועה

gets היא בעייתית לא כי היא לא בודקת הקצאות זיכרון, אלא כי אין הגבלה למספר התווים שהיא יכולה לרשום. כלומר, אתה יכול לאלקץ מקום ל-128 תווים, אבל אם המשתמש יכתוב 129, זה יכתוב לך על המשתנים האחרים (במקרה הטוב). ע"י fgets אפשר לציין מה מקסימום התווים שייקלטו, וכך כל תו נוסף שהמשתמש יכתוב, ייזרק החוצה. scanf הוא רק יותר בעייתי. הרבה יותר bug-prone.
 

vinney

Well-known member
זה בדיוק מה שכתבתי לגבי gets

ולגבי fgets, צודק מאה אחוז
 

galh

New member
כי זה לא אובייקט.

לאובייקט יש יתרון קטן ומשמעותי על Handle. היתרון הוא שאובייקט נמחק באופן אוטומטי ברגע שהוא יוצא מה- scope שהוא הוא מוכר. תנסה לכתוב פונקציה שצריכה לפתוח 5 קבצים, שברגע שפתיחת אחד מהקבצים נכשלת צריך לסגור את כל הקבצים שכן הצלחת לפתוח. ל- ++C לא "המציאו" דברים חדשים לדברים קיימים. הם עטפו במחלקות דברים קיימים. במקום להתעסק עם מערך לא דינמי אתה עובד עם vector. אז יכול להיות שאתה מתכנת C שמעולם לא גלש מגבולות הזכרון, אבל אתה היחיד. תגיד, אתה יודע במקרה מה היחס בין אנשי ה- QA לאנשי הפיתוח במיקרוסופט?! למה אתה טוען שהם לא מייחסים חשיבות לאיכות תוכנה? יצא לך לכתוב פעם תוכנה בסדר גודל של Explorer או Word?
 

OriIdan

New member
QA ומיקרוסופט...

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