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

我试图阻止访问我的网站,除了访问单个URL“/ ws / public”,每个人都被允许查看。 我在Apache Tomcat前面运行Apache WebServer,它通过Web Service提供来自Java Web应用程序的内容。

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

<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> 

这对我来说是正确的。 我testing过访问私人Web服务和其他网页,我总是得到404。这是好的。

一位同事build议,包括http://mysite/VS/ws/public/../private等“..”的请求将允许访问私人Web服务,但在我的testing中,我无法实现这一点(我不想要这个!)

那么,上面的configuration是否正确只允许访问http:// mysite / VS / ws / public ? 有没有我忽略的安全问题?

在你的MAIN apache2.conf (或者包含在主configuration文件中的一个.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错误只是表示在服务器上findfind的文件“未find”。 如果find的文件“被服务器configuration拒绝”,您将得到403错误。 换句话说,您的testing结果并不表示任何应用程序或安全级别。