c - वजन - हमारा पुस्तकालय




सी मानक पुस्तकालय के लिए सुरक्षित विकल्प (5)

सी मानक पुस्तकालय कुख्यात गरीब है जब यह I / O सुरक्षा की बात आती है कई कार्यों में बफर ओवरफ्लो ( gets , scanf ) होता है, या उचित तर्क ( scanf ) नहीं दिए जाने पर मेमोरी को रोक सकता है। हर एक बार और थोड़ी देर के बाद, मैं एक उद्यमी हैकर आया हूं जिसने अपनी खुद की लाइब्रेरी लिखी है जिसमें इन दोषों का अभाव है।

इन पुस्तकालयों में से सबसे अच्छा क्या देखा गया है? क्या आपने उन्हें उत्पादन कोड में उपयोग किया है, और यदि ऐसा है, जो शौक परियोजनाओं से अधिक है?


मेरा मानना ​​है कि अपाचे पोर्टेबल रनटाइम (एपीआर) पुस्तकालय मानक सी लाइब्रेरी की तुलना में सुरक्षित है। मैं इसे इस्तेमाल करता हूं, ठीक है, एक अपाचे मॉड्यूल के भाग के रूप में, लेकिन स्वतंत्र प्रक्रियाओं के लिए भी।


यह वास्तव में प्रयोग करने के लिए सबसे सुरक्षित पुस्तकालयों के बारे में आपके प्रश्न का उत्तर नहीं दे रहा है, लेकिन अधिकांश फ़ंक्शन जो बफर ओवरफ्लो के लिए कमजोर हैं, जिनका उल्लेख आपने सुरक्षित संस्करणों में किया था, जो बफर लंबाई को एक तर्क के रूप में लेते हैं जो सुरक्षा छेद को रोकते हैं, जब मानक तरीकों का इस्तेमाल किया जाता है

जब तक आप चेतावनियों के स्तर को कम नहीं करते हैं, आप आमतौर पर कंपाइलर चेतावनियां प्राप्त करते हैं, जब आप पदावनत विधियों का उपयोग करते हैं, सुझाव देते हैं कि आप इसके बजाय सुरक्षित विधियों का उपयोग करते हैं।


शायद पूछने के लिए पहला प्रश्न यह है कि क्या वास्तव में सादे सी की ज़रूरत है? (शायद एक भाषा की तरह शुद्ध या जावा एक विकल्प है - फिर उदाहरण बफर ओवरफ्लो वास्तव में एक समस्या नहीं है)

यदि अन्य उच्च स्तरीय भाषाओं एक विकल्प नहीं हैं तो एक और विकल्प सी + + में अपनी परियोजना के कुछ हिस्सों को लिखना है। आप एक सी इंटरफ़ेस कर सकते हैं जो सी ++ कोड को एनक्यूलेट करता है यदि आपको वास्तव में सी की आवश्यकता होती है।

क्योंकि अगर आप सभी उन्नत फ़ंक्शन जोड़ते हैं तो C ++ मानक लाइब्रेरी में निर्माण होता है - आपका सी कोड केवल अधिक से अधिक समय तक मामूली तेज़ी से होता है (और मौजूदा और परीक्षणित ढांचे से बहुत अधिक बग होते हैं)।


डीजे बर्नस्टेन, djbdns और djbdns लेखक के रूप में जाना जाने वाले डीजे बर्नस्टेन ने djblib का निर्माण djblib , जो कि कई सी मानक पुस्तकालय कार्यों के लिए एक तेज़, तंग, सुरक्षित विकल्प प्रदान करता है।


आप हमेशा अपनी पसंद की किसी लाइब्रेरी को लागू करने और इसका इस्तेमाल करने की स्वतंत्रता रखते हैं - कठिन हिस्सा यह सुनिश्चित कर रहा है कि यह उन प्लेटफार्मों पर उपलब्ध है जिन पर आपको काम करने के लिए अपने सॉफ़्टवेयर की ज़रूरत है। आप मानक कार्यों के आस-पास रैपर का उपयोग भी कर सकते हैं जहां उपयुक्त।

क्या यह वास्तव में एक अच्छा विचार है, यह कुछ विवादात्मक है, लेकिन सी मानक समिति द्वारा प्रकाशित TR24731 है - सी फ़ंक्शन के एक सुरक्षित सेट के लिए वहां निश्चित रूप से कुछ अच्छी चीजें हैं यह प्रश्न देखें: क्या आप अपने सी कोड में TR 24731 सुरक्षित फ़ंक्शन का प्रयोग करते हैं? , जिसमें तकनीकी रिपोर्ट के लिंक शामिल हैं







low-level