我试图阻止对我网站的访问,但允许所有人查看的单个 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 错误。换句话说,您的测试结果并不表示任何应用程序或安全级别。