सी में, POSIX कॉल का उपयोग करके, मैं यह निर्धारित कैसे कर सकता हूं कि पथ लक्ष्य निर्देशिका के अंदर है या नहीं?यह निर्धारित करने के लिए कि कोई पथ निर्देशिका के अंदर है या नहीं? (POSIX)
उदाहरण के लिए, वेब सर्वर की रूट निर्देशिका /srv
में है, यह getcwd()
डिमन के लिए है। /index.html
के लिए अनुरोध को पार्स करते समय, यह /srv/index.html
की सामग्री देता है।
मैं /srv
के बाहर पथों के अनुरोधों को कैसे फ़िल्टर कर सकता हूं?
/../etc/passwd
, /valid/../../etc/passwd
, आदि
विभाजन /
पर पथ और किसी भी ..
युक्त वैध टूट जाएगा सरणी खारिज /srv/valid/../index.html
तक पहुँचता है।
क्या सिस्टम कॉल के साथ ऐसा करने का एक कैननिक तरीका है? या क्या मुझे पथ को मैन्युअल रूप से चलने और निर्देशिका गहराई की गणना करने की आवश्यकता है?
मुझे लगता है कि यही कारण है कि 'क्रोट (2)' का आविष्कार किया गया था! –
@ करल नोरम: यदि आप किसी को सीमित खोल पहुंच देते हैं तो chroot बेहतर होता है। यदि आप अपने द्वारा बनाए गए किसी प्रोग्राम तक पहुंच सीमित नहीं करना चाहते हैं, तो chroot से बेहतर विकल्प हैं। – Dani