本文介绍一下小型Web应用的加固方案,内容均为原创
0x00 配置管理安全
即使在存在某些高危漏洞的情况下,我们只要做好配置方面的安全加固即可防御许多攻击。
列目录 - 显示目录索引
Apache
修改站点目录对应的配置文件

<Directory />
Options +Indexes +FollowSymLinks # 将 "+" 与 Indexes 去掉即可限制列出目录索引
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
修改后:
<Directory />
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>

创建DirectoryIndex默认文件
大家都见过很多框架的每个目录都有一个index.html文件,这个文件的存在是非常有意义的,很多线上的Web服务器都没有合格配置列出目录索引。导致网站内部许多文件都被攻击者查看到,泄漏大量信息。
为了防止列出目录索引,我们可以在站点的每个文件夹中创建一个index.html,这个文件内容是什么都无所谓了。当攻击者想通过列目录的手法访问你站点文件夹的时候,Web服务器将会判断当前目录下有没有DirectoryIndex默认首页,如果存在就显示DirectoryIndex对应的文件名的内容,这样攻击者就无法查看该目录下有什么文件了。
Tomcat
修改conf/web.xml配置文件

<init-param>
<param-name>listings</param-name>
<param-value>true</param-value> <!-- 将true改为false -->
</init-param>
修改后:
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>

Nginx
修改conf/nginx.conf配置文件

location / {
index index.html index.htm index.php l.php;
autoindex on;
}
修改后:
location / {
index index.html index.htm index.php l.php;
autoindex off;
}

IIS
设置”目录浏览”权限



隐藏服务器版本信息
Apache

将以下配置加入conf/httpd.conf:
ServerTokens Prod
ServerSignature Off

PHP
修改php.ini,将expose_php On改为:expose_php Off
IIS
找到HTTP响应头设置响应报文内容,可以将ASP.NET随意更改,甚至删除

Nginx

在加入conf/nginx.conf一行:

Tomcat

到apache-tomcat安装目录下的lib子文件夹,找到catalina.jar这包,并进行解解压
修改:lib\catalina.zip\org\apache\catalina\util\ServerInfo.properties
server.info=X
server.number=5.5
server.built=Dec 1 2015 22:30:46 UTC

或者直接更改web.xml,找到Connector,添加一个server属性:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" server="IIS Server" />
目录安全
攻击者上传恶意脚本(Webshell)到服务器端后,该脚本会被当做可信任的代码执行,这并不是我们想看到的。
Apache

更改配置文件:
<Directory "C:/phpstudy2/WWW/uploads">
<FilesMatch "\.(?i:php|php3|php4|php5)$">
Order allow,deny
Deny from all
</FilesMatch>
</Directory>
C:/phpstudy2/WWW/uploads 为要禁止执行的目录,\.(?i:php|php3|php4|php5)$中可以添加多个文件扩展名,例如:.htaccess

上面的方法已经杜绝了Webshell的执行,但是如果 - 在根目录创建 .htaccess分布式部署文件,也能够执行脚本。
服务器端配置必须满足以下三个条件:
- 能够在目录中写入任意文件
- AllowOverride 为 All
- 开启modules/mod_rewrite.so

我们现在先来做一个加固:
<Files ~ "^.(htaccess|htpasswd)$">
deny from all
</Files>
禁止所有人访问.htaccess和.htpasswd文件。
接下来要做的就是设置AllowOverride为None

Nginx

location ~* ^/uploads/.*.(php|php5)$ {
deny all;
}
注意事项:
- $ 与 { 之间有空格
- 以上的配置文件代码需要放到
location ~ .php {...}上面,如果放到下面是无效的 - uploads需要写相对路径,不能写绝对路径
- 修改后重启Nginx

IIS

设置处理程序映射即可:

设置后:

Tomcat
可以采用Apache配置,后续再更新关于Tomcat的配置