वेब रूट में पड़ा बैकअप सोर्स कोड लीक कर देता है
किसी बड़ी फ़ाइल में बदलाव से पहले स्वाभाविक कदम यही है कि पहले उसकी कॉपी बना ली जाए। cp index.php index.php.vor-aenderung, फिर काम शुरू। अगर वह फ़ाइल उसी डायरेक्टरी में है जिसे वेब सर्वर प्रकाशित करता है, तो पूरा सोर्स कोड अब सादे टेक्स्ट के रूप में डाउनलोड किया जा सकता है — डेटाबेस के लॉग इन विवरण, गोपनीय कुंजियाँ, फ़ाइल में जो कुछ भी हो।
Apache index.php को PHP से चलाता है, क्योंकि उसके आखिर में है .php। index.php.vor-aenderung के आखिर में यह नहीं है: .php। उसके आखिर में है .vor-aenderung, जिसके बारे में Apache ने कभी सुना ही नहीं, इसलिए वह डिफ़ॉल्ट काम करता है और बाइट जस के तस भेज देता है।
ज़्यादातर लोग जो नियम लिखते हैं, और वह काफ़ी क्यों नहीं है
आम बचाव एक्सटेंशनों की प्रतिबंध सूची होती है: .bak, .orig, .save, .sql, .old। यह वही फ़ाइल पकड़ती है जो उस वक्त दिमाग में आई। यहाँ जाँचने पर इस सूची ने probe.bak के लिए सही जवाब दिया और इनमें से हर एक के लिए गलत:
index.php.vor-xyz— असल में ऐसा ही हुआ थाindex.php.2026-08-19index.php.kopiestyle.css.altindex.php.1
सभी 200 के साथ भेजे गए। नाम रखने का जो तरीका किसी ने नहीं सोचा, वही इस्तेमाल होता है, क्योंकि बैकअप का नाम उस समय चल रहे काम के हिसाब से रख दिया जाता है।
कसौटी को उलटना
जो नियम काम करता है, वह यह नहीं पूछता कि कौन-से एक्सटेंशन वर्जित हैं। वह ढाँचे से जुड़ा सवाल पूछता है: क्या इस फ़ाइल नाम में सोर्स कोड का कोई ऐसा एक्सटेंशन है जो आखिर में नहीं है?
अगर है, तो यह किसी ऐसी चीज़ की कॉपी है जिसे चलाया जाना था, उसके बाद चाहे जो भी जुड़ा हो। index.php.anything मेल खाता है। style.css.anything मेल खाता है। यह पैटर्न उन नामों को भी कवर करता है जो अभी किसी ने गढ़े ही नहीं, और पूरी बात यही है।
आज लाइव सर्वर पर जाँचने पर ऊपर के पाँचों नाम अब 403 लौटाते हैं, उनमें वे भी जो मौजूद ही नहीं हैं — नियम फ़ाइल को नहीं, नाम के आकार को रोकता है।
अपवाद, और उससे मिलने वाली सीख
यहाँ एक जायज़ फ़ाइल नाम का आकार ठीक ऐसा ही है: पहले से कंप्रेस की गई फ़ाइलें इस तरह लिखी जाती हैं – style.css.1787777226.gz, यानी जान-बूझकर बीच में एक एक्सटेंशन। इसलिए नियम में एक अकेला, संकरा अपवाद है, अंकों वाले ऐसे हिस्से के लिए जिसके बाद आता है .gz, और वह फ़ाइल, जैसा होना चाहिए, 200 लौटाती है।
ऐसे अपवाद पर ही ये नियम अक्सर गड़बड़ाते हैं, इसलिए यह बताना ज़रूरी है कि यह अपवाद सुरक्षित क्यों है: यह इतना संकरा है कि कोई भी index.php.something.gz ऐसा नहीं बनाया जा सकता जिससे सोर्स वापस मिल जाए, क्योंकि बीच वाला हिस्सा सिर्फ़ अंकों का होना चाहिए। कोई ज़्यादा चौड़ा अपवाद — “.gz पर खत्म होने वाली हर चीज़” — पूरे नियम को बेअसर कर देता।
और सबसे सरल सलाह वही है, जिससे यह सब गैरज़रूरी हो जाता है: बैकअप प्रकाशित डायरेक्टरी के बाहर रखें। नियम उस दिन के लिए एक सुरक्षा जाल है जब यह बात भुला दी जाए; यह इस बात की छूट नहीं कि कॉपी कहाँ पहुँचती है, इसकी परवाह करना छोड़ दिया जाए।