.Htaccess में किसी फ़ाइल तक पहुँच से कैसे इनकार करें


112

मेरे पास निम्नलिखित .htaccess फ़ाइल है:

RewriteEngine On
RewriteBase /

# Protect the htaccess file
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

# Protect log.txt
<Files ./inscription/log.txt>
Order Allow,Deny
Deny from all
</Files>

# Disable directory browsing
Options All -Indexes

मैं आगंतुकों को निम्न फ़ाइल का उपयोग करने से मना कर रहा हूँ:

domain.com/inscription/log.txt

लेकिन मेरे पास जो ऊपर है वह काम नहीं करता है: मैं अभी भी ब्राउज़र से फ़ाइल को दूरस्थ रूप से एक्सेस कर सकता हूं।

जवाबों:


187

एक htaccess फ़ाइल के भीतर, <Files>निर्देश का दायरा केवल उस निर्देशिका पर लागू होता है (मुझे लगता है कि भ्रम से बचने के लिए जब उपनिर्देशिका के htaccess में नियम / निर्देश अभिभावकों से लागू सुपरड्रेसिंग प्राप्त करें)।

तो आपके पास हो सकता है:

<Files "log.txt">  
  Order Allow,Deny
  Deny from all
</Files>

Apache 2.4+ के लिए, आप उपयोग करेंगे:

<Files "log.txt">  
  Require all denied
</Files>

अपनी inscriptionनिर्देशिका में एक htaccess फ़ाइल में । या आप mod_rewrite का उपयोग htaccess फ़ाइल के साथ-साथ log.txt पर पहुँच से इनकार करने के लिए दोनों मामलों को संभालने के लिए कर सकते हैं।

RewriteRule /?\.htaccess$ - [F,L]

RewriteRule ^/?inscription/log\.txt$ - [F,L]

यदि आपका IIS उपयोग कर रहा है, तो इसके बजाय web.config फ़ाइल में करें।
शॉन लुट्टिन

1
पुनर्लेखन नियमों का उपयोग करना मेरे अपने कोड को * .txt की सामग्री तक पहुँचने से वंचित करता है। आप इसके आसपास कैसे पहुंचेंगे?
पैंट

8
" <Files>निर्देश का दायरा केवल उस निर्देशिका पर लागू होता है" - नहीं यह नहीं है। यह उस निर्देशिका और उसके नीचे के सभी उपनिर्देशों पर लागू होता है । तो <Files "log.txt">पकड़ लेंगे /log.txt और /inscription/log.txt
MrWhite

1
Order Allow,Deny2.4 में पदावनत होने के बाद क्या आप इस उत्तर को अपडेट कर सकते हैं ?
15

18

मजबूत पैटर्न मिलान - यह वह विधि है जिसका उपयोग मैं यहां पर पेरिशेबल प्रेस में करता हूं। मजबूत पैटर्न मिलान का उपयोग करते हुए, यह तकनीक किसी भी फ़ाइल को " .hta ", " .HTA ", या किसी भी मामले-असंवेदनशील संयोजन से बाहरी पहुंच को रोकती है। वर्णन करने के लिए, यह कोड निम्नलिखित में से किसी भी अनुरोध के माध्यम से पहुंच को रोक देगा:

  • .htaccess
  • .htaccess
  • .htaccess
  • testFILE.htaccess
  • filename.HTACCESS
  • FILEROOT.hTaCcEsS

.. आदि। स्पष्ट रूप से, यह विधि आपकी साइट की HTAccess फ़ाइलों को सुरक्षित करने के लिए अत्यधिक प्रभावी है। इसके अलावा, इस तकनीक में किलेबंदी " संतोषजनक ऑल " निर्देश भी शामिल है । ध्यान दें कि यह कोड आपके डोमेन की रूट HTAccess फ़ाइल में रखा जाना चाहिए:

# STRONG HTACCESS PROTECTION
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>

1
इस कोड का उपयोग करते समय मुझे 500 आंतरिक सर्वर त्रुटि मिलती है। कोई विचार क्यों? मैं Wordpress का उपयोग कर रहा हूँ।
किरन गिल

8
क्या यह अधिक समझ में नहीं आएगा कि केवल उपयोगकर्ताओं को डॉटफ़ाइल्स तक पहुँचने से रोका जाए? जैसे कुछ का उपयोग करना <Files ~"^\..*">
स्टीन स्कुट

1
टिल्ड और पहले उद्धरण चिह्न के बीच एक स्थान की आवश्यकता है - कम से कम मेरे लिए मुझे इसकी आवश्यकता थी। ~ स्पेस "
आर्ट जिजेल

मैंने समान व्यवहार अक्षमता प्राप्त की .files: <filesMatch "^ \ .. *"> आदेश की अनुमति दें, सभी से इनकार अस्वीकार करें </ FilesMatch>
Pinonirvana

14

मुझे विश्वास नहीं है कि वर्तमान में स्वीकृत उत्तर सही है। उदाहरण के लिए, मेरे पास .htaccessएक वर्चुअल सर्वर के रूट में निम्न फ़ाइल है (Apache 2.4):

<Files "reminder.php">
require all denied
require host localhost
require ip 127.0.0.1
require ip xxx.yyy.zzz.aaa
</Files>

यह बाहरी पहुँच को रोकता है reminder.phpजो एक उपनिर्देशिका में है। मेरे पास .htaccessApache 2.2 सर्वर पर समान प्रभाव वाली एक समान फाइल है:

<Files "reminder.php">
        Order Deny,Allow
        Deny from all
        Allow from localhost
        Allow from 127.0.0.1
     Allow from xxx.yyy.zzz.aaa
</Files>

मैं निश्चित रूप से पता नहीं है, लेकिन मुझे लगता है उस में विशेष रूप से उप-निर्देशिका परिभाषित करने के लिए प्रयास है .htaccessफ़ाइल, अर्थात <Files ./inscription/log.txt> जो इसे विफल कर रही है। .htaccessफ़ाइल को उसी डायरेक्टरी में रखना आसान होगा जैसा log.txtकि inscriptionडायरेक्टरी में है और यह वहीं काम करेगी।


1
आप मेरा उत्थान प्राप्त करें, यह मेरी अपाचे 2.4 के लिए भी काम करता है।
त्चेल्काका

3

नीचे दी गई लाइन को अपनी .htaccess फ़ाइल में रखें और अपनी इच्छानुसार फ़ाइल का नाम बदलें

RewriteRule ^(test\.php) - [F,L,NC]

-4

वैसे आप <Directory>उदाहरण के लिए टैग का उपयोग कर सकते हैं :

<Directory /inscription>
  <Files log.txt>
    Order allow,deny
    Deny from all
  </Files>
</Directory>

उपयोग न करें ./क्योंकि यदि आप /इसका उपयोग करते हैं तो यह आपकी साइट की मूल निर्देशिका को देखता है।

अधिक विस्तृत उदाहरण के लिए http://httpd.apache.org/docs/2.2/sections.html पर जाएं


2
लेकिन <Directory>कंटेनर को अंदर जाने की अनुमति नहीं है .htaccess। में .htaccess, .htaccessफ़ाइल ही " डायरेक्टरी कंटेनर" (प्रति-डायरेक्टरी कॉन्फिग फाइल) है।
१३:४

ठीक है तो आप रीडायरेक्ट का उपयोग कर सकते हैं। यदि उपयोगकर्ता शिलालेख निर्देशिका में जाता है तो Redirect /inscription/log.txt access_denied.htmlयह उपयोगकर्ता को पुनर्निर्देशित करेगा । access_denied.htmlinscription/log.txt
निकोलस अंग्रेजी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.