PHP安全:Apache的使用安全
Apache是一个优秀的全能Web服务器,作为第一个可用的Web应用服务器,随着互联网的兴起,由于它免费、稳定、性能卓越、功能强大,且跨平台和安全性被广泛使用,因此成为世界上使用排名前列的Web服务器软件。
1、运行安全
最小化原则是项目安全中最基本的原则之一,限制使用者对系统及数据进行存取所需要的最小权限,保证用户可以完成任务,同时也确保被窃取或异常操作所造成的损失尽可能小。在刚刚安装完Apache后,Apache服务通常是由root账户来运行的。如果Apache进程具有root用户特权,那么它将给系统的安全构成很大的威胁,应确保Apache进程以尽可能低的权限用户来运行。
通常使用nobody来运行Apache服务。nobody是一个普通账户,拥有很低的系统权限,同时这个用户是无法直接登录系统的,攻击者很难通过漏洞连接到你的服务器。因此nobody账户拥有比较高的安全性。
防止越权使用造成非法攻击,通过修改httpd.conf文件中的User选项,以nobody用户运行Apache达到相对安全的目的。
#vim /etc/ptthd.conf User nobody
为了确保所有的配置是适当和安全的,同时需要严格控制Apache主目录的访问权限,使非root用户不能修改该目录中的内容。Apache的主目录对应Apache Server配置文件httpd.conf的Server Root控制项。
#vim /etc/ptthd.conf Server Root /usr/local/apache
为了避免用户直接执行Apache服务器中的执行程序,应防止越权使用造成非法攻击,导致服务器系统的公开化。在配置文件access.conf或httpd.conf中的Options指令处加入Includes NO EXEC选项,用以禁用Apache Server中的执行功能。
#vim /etc/ptthd.conf options Includes NO EXEC
2、访问安全
如果只希望让某个网段或者某个IP接入,可以在Apache配置文件中进行设置。如果只允许某个IP端,如10.10.0.0/16,对Web项目进行访问,可以进行下面的设置。
#vim /etc/ptthd.conf Order Deny,Allow Deny from all Allow from 10.10.0.0/16 Or by IP: Order Deny,Allow Deny from all Allow from 10.10.1.1
如果是内部服务,除了要限制外部IP进行访问外,还建议更改Apache服务器默认端口号,防止非法访问。如果有多个网卡可指定出口网卡IP地址,应防止其他网卡IP入口对其访问。如果是研发环境,只允许自己进行访问,可以设置为127.0.0.1:8000。
#vim /etc/ptthd.conf Listen 127.0.0.1:8000
3、隐藏Apache版本号
图1中,默认Apache是显示版本号信息的,如果Apache软件有漏洞,攻击者很容易通过版本号来定位软件漏洞,对系统发起攻击。
通过修改Apache配置文件对版本号进行隐藏,将ServerTokens默认的Full修改为Prod,ServerSignature默认的On修改为Off。
ServerTokens Prod ServerSignature Off
4、目录和文件安全
为了防止非法访问、恶意攻击,应禁止Apache访问Web目录之外的任何文件。
# 设置不可访问目录 <Directory "/"> Order Deny,Allow Deny from all </Directory> # 设置可访问目录 <Directory "/wwwroot"> Order Allow,Deny Allow from all </Directory>
研发人员由于失误常常把SVN目录上传至服务器,可以通过Apache配置禁止访问.svn目录,降低因为敏感信息泄露而带来的风险。
在<Directory"/wwwroot"></Directory>中添加以下代码。
# 限制访问SVN目录 <LocationMatch "/(\.svn)/"> Order allow,deny Deny from all </LocationMatch>
同时限制访问.bak、.back、.old、.ini、.conf、filename~等类型的文件,降低因为敏感信息泄露而带来的风险。
在<Directory"/wwwroot"></Directory>中添加以下代码。
<FilesMatch \.(?i:bac?k|old|ini|conf|.*?~)$> Order allow,deny Deny from all </FilesMatch>
5、防止目录遍历
图2中,当未设置Apache的默认入口文件时,Apache会将服务端的Web目录结构输出到客户端浏览器,恶意攻击者将整个Web目录结构进行遍历,同时获取一些非授权访问的文件,给服务端带来威胁。
为了防止目录列表展示,通常需要禁止Apache以列表形式显示Web目录下的文件。在Apache配置文件中找到以下代码。
Options Indexes FollowSymLinks
Indexes的作用就是当该目录下没有默认入口文件时,就显示目录结构。修改为如下配置,将Options Indexes FollowSymLinks中的Indexes去掉。
<Directory "/"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
或者在Indexes前添加减号修改为-Indexes,即可禁止Apache显示该目录结构。
<Directory "/"> Options -Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
除了修改Apache的配置文件外,还可以在Web根目录下新建或修改.htaccess配置文件来对目录结构进行隐藏。
<Files *> Options -Indexes </Files>
同时设置Apache的默认页面。一般使用index.html作为默认页面,可根据情况改为其他文件。
<IfModule dir_module> DirectoryIndex index.html </IfModule>
6、日志配置
为了及时发现项目中的问题,查找出是否有非法访问或者恶意攻击,一定要开启Apache的日志记录功能,对运行错误、用户访问行为进行记录,记录内容包括时间、用户使用的IP地址等内容。编辑httpd.conf配置文件,设置日志记录文件、记录内容、记录格式。重要服务器除本机保存日志外,还需将日志文件发送到文件服务器保存。
LogLevel notice # 日志的级别,默认是warn,这里使用notice级别日志输出比较详细 ErrorLog "logs/error.log" # 错误日志的保存位置 CustomLog "logs/access.log" # 访问日志的保存位置 <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" common LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"%I %O" combinedio </IfModule> CustomLog "logs/access.log" combined </IfModule>
LogLevel用于调整记录在错误日志中的信息的详细程度,建议设置为notice。
ErrorLog指令设置错误日志文件名和位置。错误日志是最重要的日志文件,Apache httpd将在这个文件中存放诊断信息和处理请求中出现的错误。若要将错误日志送到Syslog,则设置ErrorLog syslog。
CustomLog指令设置访问日志的文件名和位置。访问日志中会记录服务器处理的所有请求。
LogFormat和CustomLog的格式化参数是一个字符串,这个字符串会在每次请求发生的时候,被记录到日志文件中。表1列出了Apache日志格式字符串的含义。
7、413错误页面跨站脚本漏洞
Apache HTTP服务器用于处理畸形HTTP请求时存在漏洞,远程攻击者可能利用此漏洞获取脚本源码。
如果远程用户提交的是畸形HTTP请求和无效长度数据,如表2中的ContentLength数据,就会导致Apache HTTP服务器返回客户端所提供的脚本代码,提交了无效长度数据后,Apache就会返回413 Request Entity Too Large错误,导致在用户浏览器会话中执行任意HTML和脚本代码。
目前的解决方法是向Apache配置文件httpd.conf添加ErrorDocument 413语句,禁用默认的413错误页面。
8、上传目录限制
如果应用有上传文件功能,则需要把上传目录的PHP解析权限去除,降低安全风险。在<Directory/Upload>标签中设置如下。
php_admin_flag engine off
或
php_flag engine off
除特别注明外,本站所有文章均为技术藤原创,转载请注明出处来自https://www.jishuteng.com/article/5.html


参与评论 0条评论