2

我正在寻找一种使用 API 来操作 PHP 在其下运行的网络服务器的方法。

例如,我希望能够动态添加 mod 重写规则或阻止某些路径的 IP 地址,所有这些都无需接触 .htaccess 文件。

PHP是否存在类似的东西

4

1 回答 1

5

PHP 无法动态更改 Apache 的配置,尽管如您所述,您可以使用 PHP 编辑配置或 .htaccess 文件重新加载配置。但是我认为给你的 webapp 赋予 web 服务器这么大的权力是一个很大的安全风险。

您可以使用mod_rewrite 的 RewriteMap 指令来动态阻止 IP 的示例。基本上,您将为您的网站编写一个 mod_rewrite 规则,该规则将指示 mod_rewrite 查看您的 PHP 脚本可以维护的外部数据源。

mod_rewrite 文档有一个示例可以从:拒绝黑名单中的主机

描述:
我们希望维护一个主机黑名单,就像 hosts.deny 一样,
并阻止这些主机访问我们的服务器。

解决方案:
重写引擎开启
RewriteMap hosts-deny txt:/path/to/hosts.deny
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND
重写规则 ^ - [F]
##
## hosts.deny
##
## 注意力!这是一个地图,而不是一个列表,即使我们这样对待它也是如此。
## mod_rewrite 解析它的键/值对,所以至少一个
## 虚拟值“-”必须存在于每个条目中。
##

193.102.180.41 -
bsdti1.sdm.de -
192.76.162.40 -

讨论:
第二个 RewriteCond 假设您打开了 HostNameLookups,
以便解析客户端 IP 地址。如果不是这样的话,
您应该删除第二个 RewriteCond,然后将 [OR] 标志从
第一个 RewriteCond。

您的 PHP 脚本可以维护这些文本文件(也可以使用其他数据存储),并且您可以根据您的特定需求创建任意数量的规则集来动态控制访问。那行得通吗?

于 2012-09-17T21:56:58.557 回答