web-dev-qa-db-ja.com

ファイルをリモートで非表示にします

Webサイトの一部の接続情報を保存するPHPファイルがあります。 Webから「読み取り可能」ではありません。これは良いことです。つまりWebからナビゲートするときは空白です。

しかし、たとえそれが空白であっても、人々がそれにナビゲートするとき、私はむしろサーバーが403エラーメッセージを返すことを望みます。 .htaccessを使用して、サーバーにこのエラーを返させることはできますか?これを行う適切な方法は何ですか?

3
posfan12

これはDeny from all:を使用して簡単に実行できます

<Files "filetoblock.php">
    Order Allow,Deny
    Deny from all
</Files>

これにより、403ステータスも発行されます。

3
Simon Hayter

Webから「読み取り可能」ではありません

表示されているのは、PHPファイルが処理された後の出力です。おそらくいくつかの変数を設定するだけなので、出力はありませんが、それでも処理されます。 PHPが失敗した場合、またはファイルがエラー/破損した場合、PHPの内容が公開される可能性があります。

理想的には、このファイルをドキュメントルートの外側/上に置くだけです。そうすれば、あなたはそれを一般からブロックするために何もする必要がなく、不意に何かが起こった場合でもブロックされます(.htaccessが誤って削除されるなど!)。

.htaccessのmod_rewriteでこれをブロックするには:

RewriteEngine On
RewriteRule ^file-to-block\.php$ - [F]

上記は.htaccessファイルの上部近くに配置する必要があります。

ただし、mod_rewriteも使用する別の.htaccessファイルをサブディレクトリに含めると、このディレクティブが上書きされる可能性があることに注意してください。


ただし、これらのファイルをmod_authz_Host(Apache 2.2)またはmod_authz_core(Apache 2.4)でブロック(403)することをお勧めします。 Apache 2.2については、Simonの答えをご覧ください。

Apache 2.4では、mod_authz_coreを使用します。

<Files "file-to-block.php">
    Require all denied
</Files>

または、403 Forbiddenの代わりに404 Not Foundを送信するには、上記のmod_rewriteディレクティブを変更できます。

RewriteRule ^file-to-block\.php$ - [R=404,L]
4
MrWhite