2016-09-12 7 views
5

मैं अपाचे की .htaccess फ़ाइल जांच कैसे कर सकता हूं यदि PHP सक्षम है? मैंने <IfModule !mod_php7.0.c> और <IfModule !mod_php7.c> जैसी चीजों की कोशिश की लेकिन जब मैं मॉड्यूल को सक्षम/अक्षम करता हूं तो ऐसा कुछ नहीं लगता है।PHP सक्षम होने पर .htaccess में कैसे जांचें?

मैं अपने .htaccess में फ़ॉलबैक करना चाहता हूं जो PHP अक्षम होने पर सभी से acces से इनकार करता है। सादे पाठ PHP कोड के रिसाव को रोकने के लिए।

मैं इस तरह कुछ करना चाहता हूँ:

# If PHP is not installed, deny all access to .php files to prevent PHP code leakage 
<IfModule !mod_php7.c> 
    <FilesMatch \.php$> 
     order deny,allow 
     deny from all 
    </FilesMatch> 
</IfModule> 

अंततः यह if php7 AND php5 AND php4 are disabled, deny access की तरह कुछ की जाँच करेगा। कोई विचार?

इसके अलावा, जब AllowOverride कोई नहीं है और इसलिए .htaccess फ़ाइल कुछ नहीं कर रहा है। सादे पाठ में लीक करने से PHP कोड को रोकने के लिए विकल्प क्या हैं? define, ifdefine, और if, else, ifelse:

+2

चाल (सर्वोत्तम अभ्यास) 'public_html' फ़ोल्डर में PHP स्रोत कोड नहीं डाल रहा है ;-) इस तरह आपके दोनों मामलों को ठीक से हल किया गया है। – DanFromGermany

+0

मैंने पहले ही यह किया है। मैं केवल index.php फ़ाइल डालता हूं जो मूल रूप से public_html फ़ोल्डर के बाहर से सामान शामिल करता है। लेकिन मुझे लगता है कि मैं सब कुछ ले जा सकता हूं और एक PHP फ़ाइल है जिसमें रूट के बाहर एक और शामिल है। उस मामले में सबसे बुरे मामले में, एक के साथ एक लाइनर PHP फ़ाइल में लीक शामिल हैं। सही? –

+2

हां, कई तरीके हैं, जिनके बारे में आपने उल्लेख किया है वह शायद सबसे आसान और सरल है। – DanFromGermany

उत्तर

3
<IfModule !mod_php5.c> 
    <FilesMatch ".+\.php$"> 
     Order Deny,Allow 
     Deny from all 
    </FilesMatch> 
</IfModule> 

अपाचे 2.4 में

<IfModule !mod_php5.c> 
    <FilesMatch ".+\.php$"> 
     Require all denied 
    </FilesMatch> 
</IfModule> 

अपाचे 2.4 में कई नए उपयोगी सुविधाओं देखते हैं।

निम्नलिखित में हम डिफ़ॉल्ट रूप से इनकार कर सकते हैं और केवल PHP_IS_ENABLED परिभाषित कर सकते हैं।

<IfModule mod_php5.c> 
    Define PHP_IS_ENABLED 
</IfModule> 

<IfModule mod_php7.c> 
    Define PHP_IS_ENABLED 
</IfModule> 

# ... 

<IfDefine !PHP_IS_ENABLED> 
    <FilesMatch ".+\.php$"> 
     Require all denied 
    </FilesMatch> 
</IfDefine> 
+1

धन्यवाद, लेकिन अगर mod_php5 लोड नहीं होता है लेकिन PHP 4 या 7 है? –

+0

अपाचे 2.4 में मुझे लगता है कि आप जो चाहते हैं उसे प्राप्त करने के लिए हम कुछ नई सुविधाओं का लाभ उठा सकते हैं। –

+0

'.htaccess' में 'Define' की अनुमति नहीं है – cronfy

1

यहाँ (जैसे "php 5 या php 7 सक्षम हो जाता है") है कि वास्तव में .htaccess में काम करता है PHP के कई संस्करण के खिलाफ जांच करने के लिए एक समाधान है।

इसे mod_env मॉड्यूल के साथ अपाचे 2.4 की आवश्यकता है (99% यह आपके होस्ट पर सक्षम है)।

<IfModule mod_php5.c> 
    SetEnv PHP_IS_ENABLED yes 
</IfModule> 

<IfModule mod_php7.c> 
    SetEnv PHP_IS_ENABLED yes 
</IfModule> 

<If "reqenv('PHP_IS_ENABLED') == 'yes' || reqenv('REDIRECT_PHP_IS_ENABLED') == 'yes'"> 
    ... your directives 
</If> 

REDIRECT_PHP_IS_ENABLED आंतरिक mod_rewrite के साथ पुनः निर्देशित अनुरोधों के लिए यह काम करने के लिए आवश्यक है।

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