2011-01-06 11 views
11

तक पहुंच प्रतिबंधित करने के लिए। मेरे पास एक php फ़ाइल है जो एक और PHP फ़ाइलों को प्राप्त करती है (शामिल)। सभी विरासत वाली फाइलें "शामिल" नामक एक फ़ोल्डर में स्थित हैं। मैं इस फ़ोल्डर में किसी भी प्रत्यक्ष पहुंच को प्रतिबंधित करने में सक्षम होना चाहता हूं। सर्वर के भीतर केवल PHP फाइलें "शामिल" फ़ोल्डर में फ़ाइलों के साथ संवाद कर सकती हैं। मैं इस लक्ष्य को पूरा करने के लिए .htaccess का उपयोग कैसे कर सकता हूं?.htaccess फ़ोल्डर

FYI करें, मैं निम्नलिखित कोड का इस्तेमाल किया और यह काम नहीं किया

Order deny,allow 
deny from all 

किसी भी मदद के लिए अपने में

+0

अगर यह काम नहीं करता है, यह हो सकता है कि httpd.conf .htaccess फ़ाइलों को पढ़ने नहीं होने वाली है। उदाहरण के लिए: <निर्देशिका "/ path/to/webfiles"> AllowOverride कोई नहीं कुछ और (जैसे AllowOverride सभी) को बदलें और वेब सर्वर को पुनरारंभ करें। – user535673

उत्तर

19

आप वास्तव में चलने का विकल्प नहीं है, तो दस्तावेज़ रूट क्षेत्र के बाहर फ़ोल्डर, और include_path का उपयोग कर "भी शामिल है" (यानी आप वेब से इसे करने के लिए नहीं मिल सकता है), तो

दर्ज
deny from all 

उस निर्देशिका में .htaccess निर्देशिका में।

हालांकि, विकल्प केवल उन लोगों तक पहुंच की इजाजत देने के लिए डेफिन निर्देश का उपयोग करना है जो विशिष्ट अधिकृत फ़ाइलों द्वारा प्रोग्राम शामिल करते हैं। उदाहरण के लिए, शामिल फ़ाइलों के शीर्ष में

<?php defined('ACCESS_ALLOWED') or die('Restricted Access'); ?> 

डाल दिया, और उसके बाद प्रोग्राम हैं जो उन फ़ाइलों को शामिल करने के लिए अनुमति दी जाती है में

<?php define('ACCESS_ALLOWED', 1); ?> 

डाल दिया।

यह उन लोगों को आरामदायक जीईटी को रोक देगा जो उन्हें चलाने से फाइलें शामिल करते हैं, और किसी भी वेब सर्वर के लिए काम करेंगे, न केवल उन htaccess फ़ाइलों का समर्थन करते हैं।

3

सराहना की जाएगी शामिल/.htaccess:

Order deny,allow 
deny from all 
+0

कोशिश की लेकिन काम नहीं किया –

2

तुम बस वास्तव में कर सकते हैं index.php का उपयोग करें और header() का उपयोग करके 404 शीर्षलेख पास करें:

header('HTTP/1.1 404 Not Found', 404); 

आईएमओ, यह 403 से बेहतर है, क्योंकि यह फ़ोल्डर की तरह मौजूद नहीं है। शामिल फ़ाइलों के लिए के रूप में, मुख्य फ़ाइल की पहली include/require रेखा से ऊपर इस लाइन डाल:

define('INCLUDED', true); 

और शामिल निर्देशिका में हर फ़ाइल पर, शीर्ष अधिकांश भाग में यह डाल दिया।

if (!defined(INCLUDED)) { 
    header('HTTP/1.1 404 Not Found', 404); 
} 
+2

आप बाहर निकलने के लिए भी कॉल करना चाहते हैं(); शीर्षलेख के बाद, क्योंकि पृष्ठ अभी भी निष्पादित हो सकता है। –

0

संभव अन्य विकल्प एक उच्च स्तर पर सेट के आधार पर आप उपयोग करना पड़ सकता:

Satisfy all 
Order deny,allow 
Deny from all 

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

Satisfy any 

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

1

आप htaccess या सर्वर में निम्न निर्देशों का उपयोग कर फ़ोल्डर तक सीधे पहुंच से इंकार कर सकते हैं।config contex:

मॉड-उर्फ आधारित समाधान

Redirect 403 ^/folder/.+$ 

यह सभी फ़ाइलों और की/फ़ोल्डर/करने के लिए 403 निषिद्ध त्रुटि पृष्ठ dirs रीडायरेक्ट करेगा।

मॉड-पुनर्लेखन आधार समाधान:

RewriteEngine on 

RewriteRule ^/?folder/.+$ - [F]