web-dev-qa-db-ja.com

http経由のファイルへの直接アクセスをブロックしますが、phpスクリプトアクセスは許可します

ファイル(pdf、doc、flvなど)をバッファーに読み込んで、スクリプトでユーザーに提供しています。スクリプトにはファイルにアクセスできるが、ファイルへの直接アクセスを許可しないようにする必要があります。これを達成する最良の方法は何ですか?私の権限で何かをするか、.htaccessでディレクトリをロックアウトする必要がありますか?

69
Brandon G

Damienが提案したように、最も安全な方法は、保存したいファイルをWebルートディレクトリの外に置くことです。これは、Webサーバーが独自の特権ではなく、ローカルファイルシステムの特権に従うために機能します。

ただし、Webルートへのアクセスのみを許可するホスティング会社が多数あります。ファイルへのHTTPリクエストを引き続き防ぐには、すべての通信をブロックする.htaccessファイルを使用して、それらを単独でディレクトリに入れます。例えば、

Order deny,allow
Deny from all

ディレクトリのローカル権限により、Webサーバーがファイルを読み取って実行できるため、Webサーバー、したがってサーバー側の言語は引き続きそれらを読み取ることができます。

乾杯。

91
Sam Bisbee

これが、URLからiniファイルへの直接アクセスを防ぐ方法です。ルートの.htaccessファイルに次のコードを貼り付けます。 (追加のフォルダを作成する必要はありません)

<Files ~ "\.ini$">
  Order allow,deny
  Deny from all
</Files>

私のsettings.iniファイルはルートにあり、このコードなしではwww.mydomain.com/settings.iniにアクセスできます

33
Aamir Mahmood

httpd.confでブラウザとwgetアクセスをブロックして、特にdb.incまたはconfig.incなどのファイルをインクルードします。複数のファイルディレクティブを作成する代わりに、ディレクティブでファイルタイプをチェーンすることはできません。

<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

apacheを再起動する前に設定をテストする

service httpd configtest

その後(グレースフルリスタート)

service httpd graceful
2
zzapper

ファイルはPHPスクリプトと同じサーバーにありますか?その場合、ファイルをWebルートから遠ざけて、PHPスクリプトが保管場所の許可。

2
Damien Wilson

Httpd.confファイル(ubuntuでは/ etc/Apache2ディレクトリにあります)にアクセスできる場合は、特定のディレクトリの.htaccessファイルに追加するのと同じ行を追加する必要があります。それは(たとえば):

ServerName YOURSERVERNAMEHERE
<Directory /var/www/>
AllowOverride None
order deny,allow
Options -Indexes FollowSymLinks
</Directory>

情報を制御するすべてのディレクトリに対してこれを行います。すべてのアクセスを管理するために、1つの場所に1つのファイルがあります。上記の例では、ルートディレクトリ/ var/wwwに対して実行しました。

このオプションは、外部委託ホスティング、特に共有ホスティングでは利用できない場合があります。ただし、多くの.htaccessファイルを追加するよりも優れたオプションです。

1
Sablefoste

(CodeIgniterで使用されるような)カスタムモジュールベースの.htaccessスクリプトはどうですか?試したところ、CodeIgniterアプリでうまく機能しました。他のアプリで使用するアイデアはありますか?

<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>
0
Cosmo Arun

Webアクセスから.iniファイルを防ぐには、Apache2.confに以下を入力します

<Files ~ "\.ini$">
Order allow,deny
Deny from all
</Files>
0
Daniel Boakye