私は、パブリックにアクセスできる必要がある特定のファイルを含む、設計が不十分なWebアプリを継承しましたが、そのファイルは、許可されていないディレクトリ内にあります。
言い換えれば、ディレクトリ内のすべてのファイルとサブディレクトリをブロックする方法が必要ですが、1つのファイルを上書きする方法です。
私はこれを試しています:
# No one needs to access this directly
<Directory /var/www/DangerousDirectory/>
Order Deny,allow
Deny from all
# But this file is OK:
<Files /var/www/DangerousDirectory/SafeFile.html>
Allow from all
</Files>
</Directory>
しかし、それは機能していません-許可したいファイルを含むすべてをブロックするだけです。助言がありますか?
StackOverflowにこの質問に答えるはずの答えがあります。ネストされたOrder
ディレクティブにFiles
がないと思いますか?
# No one needs to access this directly
<Directory /var/www/DangerousDirectory/>
Order Deny,allow
Deny from all
</Directory>
# But this file is OK:
<Files /var/www/DangerousDirectory/SafeFile.html>
Order Deny,Allow
Allow from all
</Files>
このディレクトリがパスワードで保護されている場合は、Satisfy any
も追加します。
HTTPパスワードによってアクセスが制限されているときに特定のファイルを許可する。注意してください、パスワード保護はファイルシステムベースで定義され、特定の許可されたファイルはURIによって定義されます。 Apache 2.4用に更新されました。
<Directory /path/to/directory/>
AuthName SecureArea
AuthType Basic
AuthUserFile /path/to/passwd-file
Require user my-user
SetEnvIf Request_URI "path/to/uri-allowed-1.php" allowedURL
SetEnvIf Request_URI "path/to/uri-allowed-2.php" allowedURL
Require env allowedURL
</Directory>
非常に遅い回答ですが、おそらく回答です。
タグはディレクトリのスコープ内にあり、絶対パスを含めることはできません。だからそれは読むべきです:
<Directory "/var/www/DangerousDirectory">
Order Deny,allow
Deny from all
# But this file is OK:
<Files "SafeFile.html">
Allow from all
</Files>
</Directory>
これにより、そのディレクトリツリーでSafeFile.htmlと呼ばれるすべてのファイルが許可されることに注意してください。