本文介绍一下小型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的配置