web-dev-qa-db-ja.com

.htaccess、順序許可、拒否、すべてから拒否:混乱していますか?

.htaccessには、次のものがあります。

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
<Files .htaccess>
order allow,deny
deny from all
</Files>

今、私はただ愚かですか、何か間違っていますか?私はオンラインでApacheのドキュメントを見ましたが、limit get post put deleteなど。しかし、私はそれがそれをやっていることは何であれ、それを許可した後に許可することは再び拒否していると言っていると考えていますか?それは私には意味がありませんし、.htaccessから削除する必要があるのか​​、間違っている場合は修正するのかわかりませんか? 3番目は.htaccessファイルへのアクセスを拒否することを意味しますが、この順序で許可してから拒否すると、最初に許可してからすぐに拒否するように見えます。

17
PHPLOVER

これは、Apache構成ディレクティブを使用する非常にわかりにくい方法です。

技術的には、最初のビットは次と同等です

Allow From All

それの訳は Order Deny,Allowは、許可ディレクティブの前に拒否ディレクティブを評価します。この場合、拒否と許可は互いに競合しますが、最後に評価された許可はすべてのユーザーに一致し、アクセスが許可されます。

さて、物事を明確にするために、この種の構成は悪いものであり、未定義の振る舞いに隣接しているため、どうしても避けるべきです。

Limitセクションは、どのHTTPメソッドが.htaccessファイルを含むディレクトリにアクセスできるかを定義します。

ここで、GETおよびPOSTメソッドはアクセスを許可され、PUTおよびDELETEメソッドはアクセスを拒否されます。さまざまなHTTPメソッドが何であるかを説明するリンクがあります。 http://www.w3 .org/Protocols/rfc2616/rfc2616-sec9.html

ただし、デフォルトでは非標準メソッド(PUTおよびDELETE)を直接処理するカスタムCGIスクリプトまたはApacheモジュールがない限り、これらの制限を使用することは多くの場合役に立たなくなります。Apacheはそれらをまったく処理しないためです。 。

また、Limitで処理できる他のメソッド、つまりCONNECT、OPTIONS、PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK、およびUNLOCKがいくつか存在することにも注意する必要があります。

また、正しく構成されたApacheインストールには次の構成部分が含まれているため(Apache 2.2以前の場合)、最後のビットはほとんど確実に役に立ちません。

#
# The following lines prevent .htaccess and .htpasswd files from being 
# viewed by Web clients. 
#
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>

「.ht」で始まるファイルへのアクセスを禁止します。

同等のApache 2.4構成は次のようになります。

<Files ~ "^\.ht">
    Require all denied
</Files>
30
SirDarius