फ़ीचर स्पॉटलाइट: फ़ाइल-आधारित नियम प्रतिस्थापन

यह दस्तावेज़ बताता है कि संवेदनशील मान (पासवर्ड, एपीआई कुंजी, टोकन) कैसे रखें FUZZY_MAP_pre / FUZZY_MAP स्रोत कोड और Git इतिहास को लोड करके बाहर निकालें हार्डकोडिंग के बजाय रनटाइम पर एक अलग फ़ाइल से प्रतिस्थापन टेक्स्ट।

यह लाइवस्ट्रीम या स्क्रीन शेयर के दौरान विशेष रूप से उपयोगी है, जहां मानचित्र स्रोत कोड स्वयं दृश्यमान हो सकता है, लेकिन संदर्भित फ़ाइल नहीं है।


1. संकल्पना

आम तौर पर, किसी नियम का प्रतिस्थापन फ़ील्ड शाब्दिक आउटपुट टेक्स्ट होता है:

CODE_ब्लॉक_0

फ़ाइल-आधारित प्रतिस्थापन सक्षम होने पर, एक प्रतिस्थापन मान जो a से शुरू होता है कॉन्फ़िगर किए गए उपसर्ग (डिफ़ॉल्ट रूप से - या .) को इसके बजाय फ़ाइल नाम के रूप में माना जाता है। ऑरा प्लगइन की अपनी निर्देशिका के सापेक्ष उस फ़ाइल नाम को हल करता है, उसे पढ़ता है सामग्री, और उस सामग्री को प्रतिस्थापन पाठ के रूप में उपयोग करता है।

CODE_ब्लॉक_1

यदि api_key.txt प्लगइन के FUZZY_MAP_pre.py के बगल में मौजूद है, तो यह (छीन लिया गया) सामग्री का उपयोग प्रतिस्थापन के रूप में किया जाता है। यदि फ़ाइल मौजूद नहीं है, तो शाब्दिक इसके बजाय स्ट्रिंग -api_key.txt लौटा दी जाती है (विफल-सुरक्षित: कोई आकस्मिक रिसाव नहीं प्रयोग करने योग्य पाठ के रूप में “फ़ाइल नहीं मिली”, और कोई क्रैश नहीं)।


2. सेटिंग्स

config/settings.py (या स्थानीय के लिए config/settings_local.py) में कॉन्फ़िगर किया गया ओवरराइड):

सेटिंग

प्रकार

डिफ़ॉल्ट

विवरण

FILE4रिप्लेसमेंट_उपयोग

बूल

‘सच’

संपूर्ण सुविधा के लिए मास्टर स्विच. यदि ‘गलत’ है, तो ‘प्रतिस्थापन’ का प्रयोग हमेशा शाब्दिक रूप से किया जाता है।

FILE4REPLACEMENT_ALOWED_PREFIXES

ट्यूपल[str]

('-', '.')

फ़ाइल लुकअप को ट्रिगर करने के लिए प्रतिस्थापन मान इन उपसर्गों में से एक से शुरू होना चाहिए। खाली/’कोई नहीं’ = किसी भी अक्षर से शुरू न होने वाले मान को संभावित फ़ाइल नाम माना जाता है।

FILE4REPLACEMENT_ALLOW_PATH_TRAVERSAL

बूल

‘झूठा’

यदि सही है, तो प्लगइन की अपनी निर्देशिका के बाहर फ़ाइलों को हल करने की अनुमति देता है (उदाहरण के लिए पूर्ण पथ, या ../ अनुक्रम)। नीचे सुरक्षा अनुभाग देखें.

FILE4REPLACEMENT_DENY_PREFIXES

ट्यूपल[str]

जैसे ('/etc', '/proc', '/dev', '/var/lib', '/root', 'C:\\Windows', 'C:\\Program Files')

इनमें से किसी से शुरू होने वाले हल किए गए निरपेक्ष पथ हमेशा अस्वीकार कर दिए जाते हैं, चाहे FILE4REPLACEMENT_ALLOW_PATH_TRAVERSAL कुछ भी हो। सिस्टम निर्देशिकाओं के विरुद्ध कठोर सुरक्षा सीमा।


3. पथ संकल्प

फ़ाइल का समाधान इस प्रकार किया गया है:

  1. प्लगइन का source_path (मैप लोडर द्वारा स्वचालित रूप से रिकॉर्ड किया गया) है SL5NET_AURA_PROJECT_ROOT के विरुद्ध शामिल हुए (SL5NET_AURA_PROJECT_ROOT से पढ़ें) पर्यावरण चर) प्लगइन की निर्देशिका प्राप्त करने के लिए।

  2. प्रतिस्थापन मान उस निर्देशिका से जुड़ जाता है।

  3. जब तक FILE4REPLACEMENT_ALLOW_PATH_TRAVERSAL True नहीं है, हल किया गया पथ प्लगइन की निर्देशिका के अंदर रहना चाहिए, अन्यथा लुकअप अस्वीकार कर दिया जाएगा।

  4. उपरोक्त के बावजूद, कोई भी हल किया गया पथ प्रवेश से शुरू होता है FILE4REPLACEMENT_DENY_PREFIXES हमेशा अस्वीकार कर दिया जाता है।

  5. यदि फ़ाइल मौजूद है, तो उसकी छीनी गई सामग्री वापस कर दी जाती है। अन्यथा मूल प्रतिस्थापन स्ट्रिंग अपरिवर्तित लौटा दी गई है।


4. सुरक्षा नोट

  • यदि आप समझते हैं तो केवल FILE4REPLACEMENT_ALLOW_PATH_TRAVERSAL सक्षम करें निहितार्थ: यह किसी भी उपयोगकर्ता को FUZZY_MAP_pre फ़ाइल को संपादित करने की अनुमति देता है (उदा. एक ऑनलाइन मानचित्र संपादक के माध्यम से) मनमानी फ़ाइलों को पढ़ने के लिए जो ऑरा प्रक्रिया कर सकती है पहुंच, और उनकी सामग्री लाइव आउटपुट टेक्स्ट के रूप में सामने आती है।

  • FILE4REPLACEMENT_DENY_PREFIXES इसके विरुद्ध आधारभूत सुरक्षा प्रदान करता है पथ ट्रैवर्सल की अनुमति होने पर भी सामान्य सिस्टम निर्देशिकाएँ, लेकिन यह है यह इस बात को प्रतिबंधित करने का विकल्प नहीं है कि सबसे पहले मानचित्र फ़ाइलों को कौन संपादित कर सकता है।

  • संदर्भित फ़ाइलें डिस्क पर सादा पाठ हैं। अपने OS की फ़ाइल के साथ संयोजित करें यदि सामग्री संवेदनशील है तो अनुमतियाँ।


5. उदाहरण

कार्यशील उदाहरण प्लगइन के लिए config/maps/plugins/TEST_FILE4REPLACEMENT/ देखें, और एक परीक्षण स्क्रिप्ट के लिए टूल्स/टेस्ट/TEST_FILE4REPLACEMENT.sh जो अभ्यास करती है इन-डायरेक्टरी लुकअप और प्लगइन डायरेक्टरी के बाहर लुकअप दोनों।

CODE_ब्लॉक_2

फिर वांछित प्रतिस्थापन पाठ के साथ इस फ़ाइल के आगे .Zebra.txt बनाएं इसे ट्रिगर करने के लिए कहें (या कंसोल के माध्यम से टाइप करें) s Zebra