फॉर्मेट स्ट्रिंग
फॉर्मेट स्ट्रिंग - यह एक 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 का उपयोग करके) - प्रोग्राम क्रैश - कोड निष्पादन (गंभीर मामलों में)