![php 和 httpd 之间的访问层次结构](https://linux22.com/image/646543/php%20%E5%92%8C%20httpd%20%E4%B9%8B%E9%97%B4%E7%9A%84%E8%AE%BF%E9%97%AE%E5%B1%82%E6%AC%A1%E7%BB%93%E6%9E%84.png)
目标是控制对 php/httpd 应用程序 owncloud 的访问,使其能够访问特定的已识别 IP 地址。php 和 httpd 似乎都有实现此目的的机制,php 是通过具有受信任域构造的 config.php 文件实现的:
'trusted_domains' =>
array (
0 => 'localhost',
1 => '10.0.0.0/16',
2 => 'aa.bb.cc.dd',
),
并且 http 是通过 conf.d 目录中的 owncloud.conf 进行的:
<Directory /var/www/http/owncloud/>
Options Indexes FollowSymLinks MultiViews
AllowOverride none
Order Allow, Deny
Deny from all
Allow from 10.0.0.0/16
Allow from aa.bb.cc.dd
</Directory>
这些的作用是什么?它们是串行的还是互斥的?为了限制 php 访问,是否需要更改 config.php 配置?有没有办法通过 httpd.conf 来限制 php 访问?这个问题有意义吗?
答案1
- 限制 Apache 端的访问是一种更通用的方法,适用于所有内容,包括静态文件。这种方法通常更安全,因为请求在 PHP 解释器看到之前就被阻止了,这使得利用 PHP 应用程序中的漏洞变得不可能(或至少更加困难)。
- 限制 PHP 应用程序端的访问仅适用于该 PHP 应用程序,并且范围非常有限。如果不对 Apache 服务器端进行额外配置,则无法阻止对不受 PHP 应用程序控制的任何内容的访问,例如静态图像或其他资源。它也无法阻止请求首先到达 PHP 解释器,从而使其容易受到软件漏洞的攻击。此外,在许多 Web 应用程序中,这种访问控制从一开始就不存在,因为系统希望依赖 Web 服务器来实现此目的。
简而言之:在 Apache 访问控制可用的情况下,我总是更喜欢它而不是 PHP 应用程序提供的访问控制。
答案2
首先是 Apache ACL,然后是 PHP ACL。您不能在 PHP 中包含之前在 Apache 中排除的内容。