मैंने एक टिप्पणी में देखा कि __func__
का उपयोग एक सुरक्षा जोखिम है। मुझे समझने की जरूरत है कि यह मामला कैसा है?__func__ पहचान सुरक्षा सुरक्षा जोखिम कैसे है?
उत्तर
__func__
का उपयोग बाइनरी में फ़ंक्शन नाम से पता चलता है, जो बाइनरी तक पहुंचने वाले हमलावर के काम को कम करता है।
यह रिवर्स इंजीनियरिंग को आसान बनाता है। इसलिए यदि आप अपना आवेदन गुप्त तरीके से काम करना चाहते हैं, तो यह हमलावर के जीवन को आसान बनाता है।
यह डीआरएम सुविधाओं के लिए प्रासंगिक है, या यदि आप प्रतियोगी अनुप्रयोगों में अपने एल्गोरिदम की नकल करना कठिन बनाना चाहते हैं।
लेकिन यह सुरक्षा को प्रभावित नहीं करता है, क्योंकि एक आवेदन जहां रिवर्सिंग कमजोरियों को दिखाता है वह पहले स्थान पर असुरक्षित था।
यदि आपके एप्लिकेशन की सुरक्षा उसके कार्य नामों पर निर्भर करती है तो एक रहस्य शेष रहता है तो यह __func__
का उपयोग करने का एक सुरक्षा जोखिम है, क्योंकि संकलक को संकलित बाइनरी में फ़ंक्शन नाम को कहीं स्टोर करने की आवश्यकता होगी।
__func__
सी 99-मानक पूर्वनिर्धारित पहचानकर्ता है जो किसी फ़ंक्शन के अंदर उपयोग किए जाने पर फ़ंक्शन नाम वाले वर्ण सरणी चर में फैला हुआ है। C99 6.4.2.2/1 से वर्णन करता है:
पहचानकर्ता
__func__
परोक्ष है, तुरंत प्रत्येक कार्य परिभाषा के उद्घाटन ब्रेस निम्नलिखित के रूप में अनुवादक द्वारा घोषित किया जाता है, घोषणास्थिर स्थिरांक चार
__func__
[ ] = "फ़ंक्शन-नाम"; दिखाई दिया, जहां फ़ंक्शन-नाम शब्दावली-संलग्न कार्य का नाम है। यह नाम फ़ंक्शन का अनौपचारिक नाम है।
ध्यान दें कि यह एक मैक्रो नहीं है और इसका प्रीप्रोसेसिंग के दौरान कोई विशेष अर्थ नहीं है।
में अधिक जानकारी के लिए इस लिंक__func__
बारे में
देखो: समाधान सुरक्षित रूप में पूर्वनिर्धारित संदर्भ के प्रति संवेदनशील निरंतर __func__
, यह एक समारोह में लागू नहीं किया जा सकता है शामिल है और उपलब्ध कराने के विस्तार पर निर्भर करता है
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1642.html
हैं एक ही सुविधा।
__func__
अपने आविष्कार के बिंदु पर पाठ रूप से विस्तारित किया गया है, इसलिए, यह ब्रेक, जारी रखने या बयान वापस करने या बयानों को सही तरीके से समाप्त करने में विफल होने के द्वारा इनवॉकिंग कोड के नियंत्रण के प्रवाह को आसानी से प्रभावित कर सकता है। इसका आह्वान करने के प्रभाव आश्चर्यजनक हो सकते हैं और सूक्ष्म त्रुटियों का कारण बन सकते हैं।
फ़ंक्शन-जैसे मैक्रोज़ या __func__
पर इनलाइन या स्थैतिक फ़ंक्शंस पसंद करें।
हालांकि, __func__
को परिभाषित करने वाले मामलों में अपरिहार्य है, परिभाषा उन बयान से बचना चाहिए जो इनवोकिंग कोड के नियंत्रण प्रवाह को बदलती हैं। और आदर्श रूप में, यह एक अभिव्यक्ति होनी चाहिए।
अधिक विचार और उदाहरण कोड:
https://www.securecoding.cert.org/confluence/display/seccode/PRE13-C.+Avoid+changing+control+flow+in+macro+definitions
यह सुनिश्चित नहीं है कि यह प्रश्न का उत्तर कैसे देता है, जो विशेष रूप से _security जोखिम_ के बारे में है और '__func__' के सामान्य संचालन/कार्यान्वयन के बारे में नहीं है। –
मैंने '__func__' के उपयोग को और अधिक समझने योग्य बनाने का प्रयास किया और यह तथ्य कि ओपी के रूप में यह' मैक्रो 'नहीं है, इस सवाल में कहा गया है। "इसका आह्वान करने के प्रभाव आश्चर्यजनक हो सकते हैं और सूक्ष्म त्रुटियों का कारण बन सकते हैं।" और उत्तर में दिए गए लिंक बहुत अच्छी तरह से इंगित करते हैं कि यह अन्य निर्भर मॉड्यूल को अप्रत्याशित रूप से व्यवहार करने और इसलिए कम सुरक्षित रूप से व्यवहार करने का कारण बन सकता है। – askmish
कहां गए आप इसे देख? – 0x90
संक्षिप्त उत्तर: किसी ने टिप्पणी में कुछ बेवकूफ लिखा था। हम में से सबसे अच्छे के साथ भी होता है। – Jens