2

APIを使用して、PHPが実行されているWebサーバーを操作する方法を探しています。

たとえば、.htaccess ファイルに触れることなく、mod 書き換えルールを動的に追加したり、特定のパスの IP アドレスをブロックしたりできるようにしたいと考えています。

このようなものはPHPに存在しますか?

4

1 に答える 1

5

PHP で Apache の構成を動的に変更することはできませんが、PHP を使用して構成を編集したり、.htaccess ファイルで構成をリロードしたりできます。しかし、Web アプリケーションに Web サーバーに対する強力な権限を与えることは、大きなセキュリティ リスクであると考えています。

IP を動的にブロックする例は、 mod_rewrite の RewriteMap ディレクティブで実行できます。基本的に、Web サイト用の mod_rewrite ルールを作成します。このルールは、mod_rewrite に、PHP スクリプトが維持できる外部データ ソースを参照するように指示します。

mod_rewrite のドキュメントには次の例があります:ブラックリストでホストを拒否する

説明:
hosts.deny のように、ホストのブラックリストを維持したいと考えています。
それらのホストをサーバーへのアクセスからブロックします。

解決:
RewriteEngine on
RewriteMap hosts-deny txt:/path/to/hosts.deny
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [または]
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND
RewriteRule ^ - [F]
##
## ホスト.拒否
##
## 注意!これはマップであり、リストではありません。
## mod_rewrite はキーと値のペアを解析するため、少なくとも
## ダミー値「-」は、各エントリに存在する必要があります。
##

193.102.180.41 -
bsdti1.sdm.de -
192.76.162.40 -

討論:
2 番目の RewriteCond は、HostNameLookups がオンになっていることを前提としています。
クライアントの IP アドレスが解決されるようにします。そうでない場合は、
2 番目の RewriteCond を削除し、[OR] フラグを削除する必要があります。
最初の RewriteCond。

PHP スクリプトでこれらのテキスト ファイルを維持でき (他のデータ ストアも利用可能)、アクセスを動的に制御する特定のニーズに合わせて任意の数のルールセットを作成できます。それはうまくいくでしょうか?

于 2012-09-17T21:56:58.557 に答える