2010-03-02 24 views
6

के माध्यम से .hg/* तक पहुंच से इनकार करें मेरी वेबसाइट एकाधिक subrepositories के साथ एक mercurial भंडार है। मुझे यह सुनिश्चित करने की ज़रूरत है कि मैं सर्वर पर प्रत्येक .hg निर्देशिका में सभी फ़ाइलों तक पहुंच से इंकार कर रहा हूं।सुरक्षा: mod_rewrite

उदाहरण के लिए, मैं http://example.com/.hg/ और http://example.com/subrepo1/.hg/

है मैंने जोड़ा .htaccess के लिए निम्न:

<Files ~ "^\.(hg|ht)"> 
    Order allow,deny 
    Deny from all 
</Files> 

यह एक अच्छी शुरुआत है, के रूप में यह .hg और .ht के साथ शुरुआत फ़ाइलों तक पहुँच से इनकार करते हैं , लेकिन यह .hg निर्देशिकाओं के अंदर फ़ाइलों तक पहुंच से इंकार नहीं करता है, इसलिए अगर कोई टाइप करता है, उदाहरण के लिए http://example.com/.hg/branch, शाखा फ़ाइल उनके ब्राउज़र में प्रदर्शित की जाएगी।

यह सुनिश्चित करने के लिए कि इन फ़ाइलों को उपयोगकर्ता को प्रदर्शित नहीं किया गया है, मुझे क्या करने की आवश्यकता है? यदि कोई मेरे सर्वर पर किसी भी .hg निर्देशिका के अंदर फ़ाइल तक पहुंचने का प्रयास करता है तो मैं ब्राउज़र पर 403 या 404 वापस भेजना चाहता हूं।

यह प्रश्न किसी भी व्यक्ति के लिए भी प्रासंगिक है जिसकी वेबसाइट एक उपवर्तन/svn भंडार है।

RedirectMatch 404 /\\.hg(/|$) 

:

उत्तर

7

आप है mod_rewrite उपयोग करने के लिए नहीं करते हैं, तो आप सिर्फ यह कर सकते हैं (पूर्ण प्रकटीकरण: जवाब सबवर्सन के लिए एक ही बात करने के बारे में this question से मर्क्युरियल के लिए अनुकूलित)।

+0

जब मैं निर्देशिका, निर्देशिका मैच, स्थान या स्थान मैच के साथ कुछ भी कोशिश करता हूं तो मुझे 500 त्रुटि मिलती है, इसलिए मुझे लगता है कि इसे .htaccess के अंदर अनुमति नहीं है। हालांकि, RedirectMatch एक आकर्षण की तरह काम करता है। धन्यवाद! – Tex

+0

@Tex - मैं इसे संपादित कर दूंगा - ऐसा लगता है कि एसवीएन प्रश्न से ओपी को 'डायरेक्टरीमैच' को भी काम करने में परेशानी थी। –

+0

मेरी समझ यह है कि .htaccess में 'निर्देशिका',' DirectoryMatch', 'location' और' LocationMatch' की अनुमति नहीं है। – Tex

0

आपके पास हमेशा इन फ़ोल्डर्स में htaccess फ़ाइलों को रखने की संभावना है और फ़ोल्डर के भीतर सभी पहुंच से इंकार कर सकते हैं।

मुझे लगता है कि आप एक समाधान चाहते हैं, जहां आपको प्रत्येक फ़ोल्डर और उपफोल्डर में .htaccess फ़ाइलों को रखने की आवश्यकता नहीं है?

निम्नलिखित (वेब ​​सर्वर पर आप यह सोचते हैं की है ssh का उपयोग) का प्रयास करें: अपनी साइट के DocumentRoot में

  • बदलें
  • एक .htaccess फ़ाइल बनाने

सामग्री:

Order deny, allow 
Deny from all 
  • निम्न आदेश निष्पादित करें:

    find . -type d -name .hg -exec cp ./.htaccess {} \;

  • बाद में फिर से अपने दस्तावेज़ जड़ से .htaccess फ़ाइल को नष्ट

+0

हाय, मुझे यह समाधान भी पसंद है, लेकिन इसमें एक कमी है - .hg निर्देशिकाओं के अंदर की फ़ाइलें संस्करणित नहीं हैं, और मुझे पूरा यकीन है कि वे एक भंडार के नए क्लोन में शामिल नहीं हैं। इसका मतलब है कि अगर मैं कभी भी एक नए क्लोन के साथ शुरू करता हूं तो मुझे यह कदम फिर से करना होगा, क्योंकि .hg/.htaccess फ़ाइलों को क्लोन में स्वचालित रूप से शामिल नहीं किया जाएगा, अगर मुझे गलत नहीं लगता है। – Tex

+0

हाँ मुझे लगता है कि आप सही हैं। एक नए क्लोन पर इसे शामिल नहीं किया जाएगा। – Aurril

0

अगर आप सिर्फ के बाहर खजाने रखने यह एक चिंता का विषय है बहुत कम है आपके DocumentRoot पूरी तरह से। आप शायद hgweb या hgwebdir का उपयोग कर रहे हैं, जिन्हें फ़ाइलों को DocumentRoot के अंदर होने की आवश्यकता नहीं है, इसलिए ऐसा न करें। उन्हें/home/hg/repos या कुछ में रखें और वहां देखने के लिए अपने hgwebdir.conf को कॉन्फ़िगर करें।

डॉक्यूमेंट रूट के अंदर रिपोज़ रखने का एकमात्र कारण Mercurial के लिए स्थिर-http यूआरएल फॉर्म सक्षम करेगा, लेकिन यह बहुत धीमा है और जब संभव हो तो hgweb हमेशा पसंद किया जाता है।