说在前面:为什么文章标题不写“让XAMPP设置为生产环境……”,因为XAMPP的作者已经说明

理念
XAMPP 背后的理念,是为想进入 Apache 世界的开发者提供一套易于安装的发行版。为了方便开发者, XAMPP 被默认配置为所有功能全部开启。

从安全的角度看,默认配置并不理想,对生产环境也不够安全——请勿在此类环境中使用 XAMPP。
所以这篇文章只是个记录,拿来参考请再三考虑。

[toc]

XAMPP作为我们学校服务器最常用的环境我真心不想吐槽。随便一个网站就可以webshell。

废话不多说了,下面我的配置记录一下。

· 最最最基本的安全设置

一、修改MySQL root密码

全新安装完成的xampp完成后总会访问一下http://localhost/securtiy/,去更改MySQL的root密码,这是必须的。

二、删除多余的MySQL用户,设置pma账户密码

在phpmyadmin中一定要删除那几个没密码的用户(除了pma),然后一定要设置pma的密码,一定要高强度的密码。

然后开始编辑phpmyadmin的配置文件 (xampp路径)\phpmyadmin\config.inc.php,找到以下代码并求改,

[php]

/* User for advanced features */
$cfg[‘Servers’][$i][‘controluser’] = ‘pma’;
$cfg[‘Servers’][$i][‘controlpass’] = ‘(这儿填写你刚刚设置的pma的密码) ‘;

[/php]

三、注释多余的Alias虚拟目录

找到 (xampp路径)\apache\conf\extra\httpd-xampp.conf,注释下列几行(在行首加上一个#)。

[php]

#<Directory "C:/xampp/htdocs/xampp">
#
# <Files "status.php">
# php_admin_flag safe_mode off
#
#
# AllowOverride AuthConfig
#

#
# Alias /security "C:/xampp/security/htdocs/"
# <Directory "C:/xampp/security/htdocs">
#
# <Files "xamppsecurity.php">
# php_admin_flag safe_mode off
#
#
# AllowOverride AuthConfig
# Require all granted
#

# Alias /licenses "C:/xampp/licenses/"
# <Directory "C:/xampp/licenses">
# Options +Indexes
#
# DirectoryIndexTextColor "#000000"
# DirectoryIndexBGColor "#f8e8a0"
# DirectoryIndexLinkColor "#bb3902"
# DirectoryIndexVLinkColor "#bb3902"
# DirectoryIndexALinkColor "#bb3902"
#
# Require all granted
#

# Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
# <Directory "C:/xampp/phpMyAdmin">
# AllowOverride AuthConfig
# Require all granted
#

# Alias /webalizer "C:/xampp/webalizer/"
# <Directory "C:/xampp/webalizer">
#
# <Files "webalizer.php">
# php_admin_flag safe_mode off
#
#
# AllowOverride AuthConfig
# Require all granted
#
#

#
# New XAMPP security concept

[/php]

接着找到类似以下代码,改成这样的

[php]
<LocationMatch "^/(?i:(?:phpmyadmin))">
Order deny,allow
Deny from all
Allow from ::1 127.0.0.0/8 \
fc00::/7 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 \
fe80::/10 169.254.0.0/16

ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var

[/php]

四、隐藏Apache版本

找到(xampp目录)\apache\conf\extra中的httpd-default.conf文件,修改以下两处

[php]
ServerTokens Full 改为 Prod //不允许在http响应里返回服务器的版本信息
ServerSignature On改为off //不允许显示服务器的特征信息
[/php]

五、注释mod_status和mod_info模块

这两个模块主要用于查看apache的运行状态和服务器信息的,一般我们很少会用到,除非在进行apache性能调优和状态查看时,会用到以上两个模块。所以建议把这个两模块的配置注释掉。注释方法十分简单,打开httpd.conf文件,打到以上两个模块所在的行添加#,并重启apache服务使配置生效就OK了。

[php]
LoadModule status_module modules/mod_status.so
LoadModule info_module modules/mod_info.so

如需使用以上两个模块,请打开xampp\apache\conf\extra目录下的httpd-info.conf文件,将其中server-status、info两个配置修改如下:
<strong>server-status</strong>
[php]
SetHandler server-status
Order deny,allow
Deny from all
[/php]

server-info

[php]
SetHandler server-info
Order deny,allow
Deny from all
Allow from 127.0.0.1//表示只允许本机访问,前提是要加载mod_info.so模块
[/php]

六、修改PHP设置

修改路径为xampp\php\php.ini
注释掉一些高危函数

[php]
disable_functions = exec,passthru,shell_exec,system,popen,proc_open,proc_close,curl_exec,curl_multi_exec,par se_ini_file,show_source,dl,passthru,escapeshellarg,escapeshellcmd
[/php]

禁止显示PHP的版本

[php]
expose_php = Off
[/php]

七、修改FileZilla控制台密码

打开XAMPP Control Panel,配置FileZilla Server的控制台密码。

在FileZilla的控制台中点击Edit→Settings→Admin Interface settings

勾选Change Admin Password 修改FileZilla Server的控制台密码

这样基本的安全配置算是完成了。

· 接下来的步骤也很重要

一、Apache 服务的运行账户

1、首先,创建一个名为apache的帐户,用户组设置为Guests。(注意把apache用户从Users组中移除);

2、在服务控制台(运行,services.msc)中找到apache,更改属性,登录,调整账户为apache,密码一定要填对哦~

3、给(xampp目录)\tmp、、apache日志文件夹、你的网站根目录、添加apache的读写权限。

二、修改httpd.conf

1、找到 (xampp目录)\apache\conf\httpd.conf

最低行添加一句

[php]

Include "conf/extra/vhosts/*.conf"

[/php]

注释掉

[php]
# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf
[/php]

2、在 conf\extra 中新建vhosts文件夹,新建default.conf文件。内容如下:

[php]

ErrorDocument 400 /errpage/400.html
ErrorDocument 403 /errpage/403.html
ErrorDocument 404 /errpage/404.html

DeflateCompressionLevel 7
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE css js html htm gif jpg png bmp php

ExpiresActive On
ExpiresByType image/gif A3600
ExpiresByType image/jpeg A3600
ExpiresByType image/png A36000
ExpiresByType text/css A3800
ExpiresByType application/x-shockwave-flash A3600
ExpiresByType application/x-javascript A3600
ExpiresByType video/x-flv A3600

<Directory "D:/server/htdocs">
Options -Indexes +FollowSymLinks
Allow from all
AllowOverride All

ServerAdmin admin@oaserver
DocumentRoot "D:/server/htdocs"
php_admin_value open_basedir "D:\server\htdocs;C:\xampp\tmp;"

[/php]

可以看出我配置的站点根文件夹位于 D:\server\htdocs
php_admin_value open_basedir “D:\server\htdocs;C:\xampp\tmp;” 这一句就是防跨站,限制PHP脚本运行目录。

接下来就是优化了,我会在接下来的文章中继续介绍的。不过在最后还是奉劝各位不要为了图方便就使用XAMPP作为生产环境!!