Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C में फॉर्मेट स्ट्रिंग भेद्यता और रोकथाम उदाहरण के साथ

फॉर्मेट स्ट्रिंग

फॉर्मेट स्ट्रिंग - यह एक ASCII स्ट्रिंग है जिसका उपयोग स्ट्रिंग्स को फॉर्मेट करने के लिए किया जाता है। यह टेक्स्ट और फॉर्मेटिंग पैरामीटर्स से युक्त एक ASCII स्ट्रिंग है।

प्रोग्राम के आउटपुट को फॉर्मेट करने के लिए, C में विभिन्न फॉर्मेट स्ट्रिंग्स हैं।

फॉर्मेट स्ट्रिंग भेद्यताएं (FORMAT STRING VULNERABILITIES)

ये बग हैं जो प्रोग्रामिंग में त्रुटियों के कारण उत्पन्न होते हैं जो प्रोग्रामर द्वारा आसानी से की जा सकती हैं। यदि ऐसा कोई त्रुटि-प्रवण कोड ब्लॉक आउटपुट फंक्शन जैसे printf, sprintf आदि को पास किया जाता है। तो एक मनमाने मेमोरी पते पर राइट ऑपरेशन किया जाता है।

उदाहरण

#include <stdio.h> 
#include <string.h> 

int main() {
    char buffer[100];
    strncpy(buffer, "Hii ", 5);
    printf(buffer);  // भेद्यता: buffer में फॉर्मेट स्पेसिफायर हो सकते हैं!
    return 0;
}

यदि buffer में "%s" या "%n" जैसे फॉर्मेट स्पेसिफायर होते हैं, तो printf उन्हें फॉर्मेट पैरामीटर्स के रूप में व्याख्या करेगा, जिससे मेमोरी लीक या क्रैश हो सकता है।

रोकथाम (PREVENTIONS)

फॉर्मेट स्ट्रिंग भेद्यताओं को रोकने के लिए कुछ उपाय किए जा सकते हैं:

  • फॉर्मेट स्ट्रिंग को प्रोग्राम के भाग के रूप में उपयोग करें इनपुट डेटा के बजाय। इसे आसानी से "%s" स्ट्रिंग फॉर्मेट का उपयोग करके हल किया जा सकता है।
  • फॉर्मेट स्ट्रिंग बनाने के लिए स्थिरांक का उपयोग करें और फंक्शन कॉल के आर्गुमेंट के रूप में सभी वेरिएबल स्ट्रिंग्स को निकालें बजाय उन्हें स्थिर स्ट्रिंग में उपयोग करने के।
  • फॉर्मेट गार्ड्स का उपयोग उन मामलों के लिए करें जहां स्थिरांक और वेरिएबल स्ट्रिंग इनिशियलाइज़ेशन मानदंडों का पालन नहीं किया जा सकता।

सुरक्षित कोड उदाहरण

// असुरक्षित
printf(userInput);

// सुरक्षित
printf("%s", userInput);

// या
printf("User input: %s", userInput);

सामान्य फॉर्मेट स्पेसिफायर

स्पेसिफायरअर्थ
%d, %iहस्ताक्षरित पूर्णांक
%uअहस्ताक्षरित पूर्णांक
%sस्ट्रिंग
%cवर्ण
%fफ्लोटिंग पॉइंट
%pपॉइंटर पता
%nलिखे गए वर्णों की संख्या (खतरनाक!)

प्रभाव

फॉर्मेट स्ट्रिंग भेद्यताएं निम्नलिखित का कारण बन सकती हैं: - सूचना प्रकटीकरण (स्टैक/हीप पते पढ़ना) - मनमाना मेमोरी राइट (%n का उपयोग करके) - प्रोग्राम क्रैश - कोड निष्पादन (गंभीर मामलों में)

  1. PowerPoint Format Painter से टेक्स्ट फ़ॉर्मेट कैसे करें PowerPoint Format Painter से टेक्स्ट फ़ॉर्मेट कैसे करें

    आपने PowerPoint में टेक्स्ट की एक स्ट्रिंग या पूरे टेक्स्ट ब्लॉक को दो या तीन अलग-अलग विकल्प लागू करके कितनी बार बदला है? शायद आपने फ़ॉन्ट आकार बढ़ाया, उसका रंग बदला, और उसे इटैलिक बना दिया। और अब आप इन समान परिवर्तनों को कई और टेक्स्ट स्ट्रिंग्स पर लागू करना चाहते हैं। अपने आप को आसान बनाएं और इन स

  1. JavaScript त्रुटि और अपवाद प्रबंधन: पूर्ण उदाहरण JavaScript त्रुटि और अपवाद प्रबंधन: पूर्ण उदाहरण

    JavaScript में त्रुटि और अपवाद प्रबंधन try, catch, finally, और throw स्टेटमेंट्स का उपयोग करके किया जाता है। यह एप्लिकेशन को क्रैश होने से बचाता है और उपयोगकर्ता अनुभव को बेहतर बनाता है। उदाहरण: विभाजन कैलकुलेटर { const num = document.querySelectorAll(.inputNum)[0].value; const n

  1. C++ में उदाहरण के साथ एक्सप्रेशन ट्री C++ में उदाहरण के साथ एक्सप्रेशन ट्री

    एक एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री है जिसमें ट्री का प्रत्येक नोड या तो एक ऑपरेटर या ऑपरेंड से बना होता है। लीफ नोड्स ट्री के एक ऑपरेंड को दर्शाते हैं। नॉन-लीफ नोड्स ट्री के एक ऑपरेटर को दर्शाते हैं। उदाहरण: इनफिक्स एक्सप्रेशन प्राप्त करने के लिए जिसे आसानी से हल किया जा सकता है, हम