以下 Apache Web 服务器配置是否阻止访问除一个 URL 之外的所有 URL?

以下 Apache Web 服务器配置是否阻止访问除一个 URL 之外的所有 URL?

我试图阻止对我网站的访问,但允许所有人查看的单个 URL“/ws/public”除外。我在 Apache Tomcat 前面运行 Apache WebServer,Apache Tomcat 通过 Web 服务提供来自 Java Web 应用程序的内容。

我有一个 Apache WebServer 的配置文件,如下所示:

<VirtualHost *:80>
    ServerName foo.org
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPass        /VS/ws/public http://localhost:8090/VS/ws/public
    ProxyPassReverse /VS/ws/public http://localhost:8090/VS/ws/public
</VirtualHost>

在我看来这是正确的。我测试过访问私有 Web 服务和其他页面,但总是得到 404。这没问题。

一位同事建议,请求中包含“..”例如http://mysite/VS/ws/public/../private允许访问私有 Web 服务,但在我的测试中我无法实现这一点(我不想要这个!)

那么,上述配置是否正确,只允许访问http://我的网站/VS/ws/public? 是否存在我忽略的安全问题?

答案1

在您的 MAIN 中apache2.conf(或.conf包含在主配置文件中的文件),您应该有一个目录来设置默认拒绝访问服务器的所有部分

<Directory "/">
  Require all denied
</Directory>

然后,在你的<VirtualHost *:80>块内,你应该包含一个访问控制仅允许访问文档根目录

<Directory "/var/www/html">
  Require all granted
</Directory>

如果没有这个,那么您的同事认为服务器设置中存在漏洞的说法是正确的。

或者:如果你真的仅有的想要访问http://mysite/VS/ws/public,您可以使用<Location>容器

<Location "/">
  Require all denied
</Location>

<Location "/VS/ws/public">
  Require all granted
</Location>

<VirtualHost *:80>区块中。

笔记:404 错误仅表示服务器上“未找到”所需文件。如果所需文件“被服务器配置拒绝”,您将收到 403 错误。换句话说,您的测试结果并不表示任何应用程序或安全级别。

相关内容