2012-02-14 14 views
112

यहाँ से एक फ़ोल्डर और फ़ाइल के लिए सीधी पहुँच से इनकार परिदृश्य है:इनको

  • कुछ फ़ाइलों index.php जो includes फ़ोल्डर में हैं में शामिल किए गए रूट फ़ोल्डर में एक index.php फ़ाइल नहीं है।
  • 1 अन्य फ़ाइल (submit.php) फ़ॉर्म सबमिट करने के लिए रूट फ़ोल्डर में है।

मैं htaccess द्वारा includes फ़ोल्डर में फ़ाइलों तक सीधे उपयोगकर्ता पहुंच को प्रतिबंधित करना चाहता हूं। submit.php के लिए भी। लेकिन index.php फ़ाइल के लिए काम करेगा। पसंद है, यदि उपयोगकर्ता www.domain.com/includes/somepage.php टाइप करता है, तो यह इसे प्रतिबंधित करेगा (एक त्रुटि पृष्ठ पर रीडायरेक्ट किया जा सकता है)।

उत्तर

228

मैं सिर्फ वेब जड़ से बाहर includes फ़ोल्डर कदम होगा, लेकिन अगर आप पूरे includes फ़ोल्डर के लिए सीधी पहुँच ब्लॉक करना चाहते हैं, आप उस फ़ोल्डर है कि बस में शामिल है में एक .htaccess फ़ाइल रख सकते हैं:

deny from all 

इस तरह आप उस फ़ोल्डर से कोई भी फ़ाइल नहीं खोल सकते हैं, लेकिन आप उन्हें बिना किसी समस्या के PHP में शामिल कर सकते हैं।

+4

के लिए वर्जित त्रुटि दिखाएगा अन्य फ़ाइल उस फ़ोल्डर में मौजूद फ़ाइल को AJAX अनुरोध करने में सक्षम होगी? –

+13

@ चैतन्य कंधुरकर नहीं, एक अजाक्स अनुरोध एक सामान्य http अनुरोध है, जिससे इनकार किया जाएगा। – jeroen

+0

सीनियर बी/सी मैं नया वेब प्रोग्रामिंग। मैं अपनी फ़ाइल index.php तक पहुंच के लिए अपवाद कैसे जोड़ सकता हूं? – PhatHV

8

यदि मैं सही ढंग से समझता हूं तो आप शामिल फ़ोल्डर में पहुंच से इनकार करना चाहते हैं?

एक .htaccess जिसमें 'सभी से डेनी' निर्देश शामिल है, इसमें फ़ोल्डर शामिल है।

44

यह शुद्ध है mod_rewrite आधारित समाधान:

RewriteRule ^(includes/|submit\.php) - [F,L,NC] 

यह अगर यूआरआई शामिल उपयोग करने के लिए मना किया त्रुटि दिखाएगा या तो /includes/ या /submit.php

+3

सबमिट फ़ाइल को संबोधित करने के लिए अच्छी नौकरी –

8

आपका क्यू दो भागों में आती है, दोनों जेरोन और anubhava के समाधान के लिए काम करते हैं भाग I - तक पहुंच/इनकार करने से इंकार कर रहा हूं। अनुभावा भाग II के लिए भी काम करता है। मैं उत्तरार्द्ध पसंद करता हूं क्योंकि मैं DOCROOT/.htaccess का उपयोग करता हूं और यह एक ही फाइल में इस तरह का नियंत्रण रखता है।

हालांकि मैं जो चर्चा करना चाहता था वह है "submit.php तक पहुंच को नकारने" की अवधारणा। यदि आप submit.php का उपयोग नहीं करना चाहते हैं तो यह डॉक्रॉट में क्यों है? मुझे संदेह है कि यहां का जवाब यह है कि आप इसे कुछ रूपों में एक क्रिया लक्ष्य के रूप में उपयोग करते हैं और केवल फॉर्म को सबमिट करते समय इसे निकाला जाना चाहिए, न कि सीधे, उदा। एक स्पैमबॉट से।

यदि यह सत्य है तो आप अनुभावा के भाग II का उपयोग नहीं कर सकते क्योंकि इससे आपका फॉर्म विफल हो जाएगा। क्या आप यहाँ कर सकते .htaccess चेक के साथ यह सुनिश्चित करें कि रेफरर अपने स्वयं के सूचकांक पृष्ठ था है (i):

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC] 
RewriteRule ^submit\.php$ -         [F] 

और (ii) अपने PHP index.php प्रपत्र जनरेटर के भीतर एक के लिए कुछ छिपा क्षेत्र शामिल टाइमस्टैम्प और सत्यापन। प्रमाणीकरण टाइमस्टैम्प के एमडी 5 के पहले 10 वर्ण और कुछ आंतरिक रहस्य हो सकता है। जमा करने पर प्रसंस्करण पर आप (i) टाइमस्टैम्प और सत्यापन मिलान को सत्यापित कर सकते हैं, और (ii) टाइमस्टैम्प वर्तमान समय के 15 मिनट के भीतर है, कहें।

यह आप स्पैमिंग को एकमात्र व्यावहारिक तरीके से रोक सकते हैं कि स्पैमर को वैध टाइमस्टैंप/सत्यापन जोड़ी मिल सकती है, एक फॉर्म को पार्स करना होगा, लेकिन इस स्क्रैप में केवल 15 मिनट का जीवन होगा।

5

संभव अन्य विकल्प एक उच्च स्तर पर सेट पर निर्भर करता है आप अपने में अपनी .htacces फ़ाइल में निम्नलिखित डाल करने के लिए आवश्यकता हो सकती है निर्देशिका में शामिल हैं:

Satisfy all 
Order deny,allow 
Deny from all 

जब ऊपरी निर्देशिका सहित बुनियादी प्रमाणीकरण परिभाषित मैं इस में भाग रेखा:

Satisfy any 

इस को रोकने था मेरी प्रभावी करने के लिए क्योंकि उपयोगकर्ताओं को प्रमाणीकृत किए गए सभी से इंकार करते हैं।

18

यह एक फ़ाइलें निर्देश का उपयोग करें और सभी फ़ाइलों तक पहुँच अस्वीकृत करने के लिए, तो यह फिर से उपयोग फ़ाइलों को सुलभ हैं स्थापित करने के लिए संभव है: आधारित समाधान

<Files ~ "^.*"> 
    Deny from all 
</Files> 

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif"> 
    Allow from all 
</Files> 
+3

मुझे इस बारे में निश्चित नहीं है कि इस सवाल को पोस्ट किया गया है कि उसकी समस्या हल हो गई है या नहीं, लेकिन यह एसओ की सुंदरता है कि कई उत्तर कई सदस्यों की मदद कर सकते हैं। इस अंतिम जवाब ने मेरी समस्या का समाधान किया। मैं साइट को सीएसएस फ़ाइल प्राप्त करना चाहता हूं लेकिन टीटीएफ या ओटीएफ फ़ॉन्ट्स तक पहुंच नहीं है, और बूम! संकल्प लिया। –

+0

इसके बाद मैं सबफ़ोल्डर –

8

1 लाइनर mod_alias:

RedirectMatch 403 ^/folder/file.php$ 

यह /folder/file.php

+1

+1 में फ़ाइलों तक पहुंचने में सक्षम नहीं हूं - यह वास्तव में बहुत अच्छा है, क्योंकि अगर आप किसी भी फ़ोल्डर में ** 404 ** लागू करते हैं, तो regex '^ फ़ोल्डर' का उपयोग करके कोई भी फाइल मौजूद नहीं है । – bytecode77

संबंधित मुद्दे