前提:在安装时使用自定义的安装路径,并配置使用自定义的WEB目录。
一、Apache禁止遍历目录(重要)
将Options Indexes 中的Indexes 去掉。Indexes 的作用就是当该目录下没有默认索引文件时,就显示目录结构。
利用Web服务器和Web应用程序中会强迫Web服务器返回目录列表的特定问题,例如“URL 诡计”攻击,或形态异常的HTTP
请求,是另一个获取目录列表的可能方式。
注意:攻击者使用目录列表来查找Web目录中,通常不通过Web站点上的链接显现出来的文件。配置文件及可能含有敏感信息
的Web应用程序其他组件,都可以利用这个方式来查看。
二、apache 隐藏版本信息
修改主配置文件httpd.conf,将下面两行添加到配置文件的末尾
ServerSignature Off
ServerTokens ProductOnly
备注:这个作用显而易见,防止对方“知己知彼”
三、关闭trace-method
配置文件添加一行
TraceEnable off
备注:TRACE 方法用于调用请求消息的远程应用层回送。请求的最终接收方应该以 200(OK)响应的实体主体向客户端反映接收到的消息。TRACE 可让客户端查看在请求链的另一端收到什么,并将这项数据用于测试或诊断信息。
四、禁用Multiviews功能
在Apache配置文件中禁用Multiviews功能
<Directory 程序所在目录>
Options MultiViews #删除MultiViews
</Directory>
备注:
所谓的Multiviews,即Apache会根据客户端发送的MIME类型,执行一个隐含文件名模式匹配。
如果提供一个无效的MIME类型,如:'application/unknown',Apache会显示所有选项,可能导致Web应用程序
文件系统结构泄露。
也可以用Options None来保证安全性。但是,如果启用了mod_rewrite, 那么Options就一定要启用FollowSymLinks或者SymLinksifOwnerMatch, 否则会出现Fobidden页面禁止访问的错误。
五、Apache文件名解析特性导致上传漏洞
Apache对于文件名的解析是从后往前解析的。例如:webshell.php.jpg这样的文件,上传时会被当做jpg图片,运行时会被当做php。可以在httpd.conf配置文件中添加以下内容来阻止Apache解析这种文件。
<Files ~ "\.(php.)">
Order Allow,Deny
Deny from all
</Files>
类似配置,可以禁止对象有很多:
#增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>
#禁止访问某些指定的目录:(可以用 <DirectoryMatch> 来进行正则匹配)
<Directory ~ "^/var/www/(.+/)*[0-9]{3}">
Order allow,deny
Deny from all
</Directory>
#通过文件匹配来进行禁止,比如禁止所有针对图片的访问:
<FilesMatch \.(?i:gif|jpe?g|png)$>
Order allow,deny
Deny from all
</FilesMatch>
#针对URL相对路径的禁止访问:
<Location /dir/>
Order allow,deny
Deny from all
</Location>
#针对代理方式禁止对某些目标的访问(<ProxyMatch> 可以用来正则匹配),比如拒绝通过代理访问cnn.com:
<Proxy http://cnn.com/*>
Order allow,deny
Deny from all
</Proxy>
#禁止某些IP访问/只允许某些IP访问。如果要控制禁止某些非法IP访问,在Directory选项控制:
<Directory "/var/www/web/">
Order allow,deny
Allow from all
Deny from 10.0.0.1 #阻止一个IP
Deny from 192.168.0.0/24 #阻止一个IP段
</Directory>
#只允许某些IP访问,适合比如就允许内部或者合作公司访问:
<Directory "/var/www/web/">
Order deny,allow
Deny from all
All from example.com #允许某个域名
All from 10.0.0.1 #允许一个iP
All from 10.0.0.1 10.0.0.2 #允许多个iP
Allow from 10.1.0.0/255.255.0.0 #允许一个IP段,掩码对
All from 10.0.1 192.168 #允许一个IP段,后面不填写
All from 192.168.0.0/24 #允许一个IP段,网络号
</Directory>
附录:apache目录权限控制详细说明
<Directory 目录名></Directory> 定义一个目录
Options:目录中将使用哪些服务器特性
None //不启用任何额外特性
All //启用除MultiViews之外的所有特性(默认设置)
Indexes //当用户访问该目录时,找不到index文件,则返回该目录下的文件列表给用户
FollowSymLinks //可以在该目录中使用符号连接,这样就访问目录之外的文档
MultiViews //允许内容协商的多重视图
Includes //允许服务器端包含
IncludesNOEXEC //允许服务器端包含,但禁用#exec命令和#exec CGI
ExecCGI //允许执行CGI脚本
另外:
+ 号表示合并上层目录的Options和当前目录的Options
- 号表示移除上层目录的Options选项
<Directory />
Options Indexes FollowSymLinks
</Directory>
<Directory /www>
Options Includes //当前目录只有Includes
</Directory>
#################################################
<Directory />
Options Indexes FollowSymLinks
</Directory>
<Directory /www>
Options +Includes -Indexes //当前目录有FollowSymLinks和Includes
</Directory>
AllowOverride
None //禁止搜索该目录下的.htaccess文件。
All //允许使用该目录下的.htaccess文件。
由于Apache对一个目录的访问控制设置是能够被下一级目录继承的,
因此对根目录的设置将影响到它的下级目录,
如果从根目录就允许查看.htaccess文件,
那么Apache就必须一级一级的查看.htaccess文件,对系统性能会造成影响,
因此对于系统根目录设置AllowOverride None不但对于系统安全有帮助,也有益于系统性能。、
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
目录访问控制
Apache2.2 使用order和allow,deny
Order Allow,Deny //order决定最后使用哪一条规则
Allow from all
Deny from ip1 ip2 //deny是最后一条,符合ip1和ip2的访问会被禁止
Order Deny,Allow //最后一条是allow,所以第三条deny不会生效
Allow from all
Deny from domain.org
Order Allow,Deny
Allow from ip1
Deny from all //deny是最后一条,all包含ip1,所以所有访问都会禁止
Apache2.4 使用require
Require all granted //允许所有访问
Require all denied //拒绝所有访问
Require local //仅允许本地访问(默认)
Require all granted
Require ip 192.168.0.1 //仅允许IP:192.168.0.1 访问
Require all granted
Require not ip 192.168.0.1 //仅禁止IP:192.168.0.1访问
附录:常见Web安全漏洞列表,Web开发和部署的时候需要加强注意
- SQL注入
- 弱密码
- 目录遍历
- 系统命令执行
- 越权访问
- 信息泄露
- 跨站脚本攻击
- 拒绝服务
- 资源位置可预测
- 逻辑错误
- 配置不当
- 内容电子欺骗
- 外链信息