Windows+Apache+PHP安全配置和优化笔记

Apache在Linux下应用的比较多,这里的配置基于Windows NT,因为国内大多数站长都是使用的Windows服务器。

前段时间,我的手机壁纸网站服务器IIS崩溃,一时没有找到原因,重装IIS也没有解决问题,所以临时使用Apache做为WebServer。

这里记录下配置笔记。

首先是Apache的安全配置:

  1. 如果不需要目录浏览,禁用目录浏览
    Options FollowSymLinks
  2. 如果不需要.htaccess功能,能起到非常重要的安全保护并加快程序响应速度
    AllowOverride none
  3. 禁用不用或者不安全的模块
  4. 启用Apache的错误日志功能
    ErrorLog “D:/wamp/logs/apache_error.log”
  5. 启用PHP的目录权限限制,严格控制跨目录访问权限
    php_admin_value open_basedir “E:/wamp/www.4wei.cn”
  6. 修改Apache的默认用户组和用户
    <IfModule !mpm_winnt_module>
    User daemon
    Group daemon
    </IfModule>
  7. 禁止显示Apache的版本信息和系统信息
    ServerTokens ProductOnly
    ServerSignature Off

其次,是Apache在Windows下的优化配置,主要是mpm_winnt的配置:

  1. 主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化
    <IfModule mpm_winnt.c>
    ThreadsPerChild 250
    MaxRequestsPerChild 5000
    </IfModule>
  2. mpm_winnt的详细说明和配置请参考
    http://www.javatang.com/archives/2008/02/19/0801260.html

最后,是PHP的一些安全设置:

  1. 请保证你的PHP版本已经升级为最新版,这样可以解决很多棘手安全问题
  2. 可以考虑启用安全模式,如果程序没有严格要求的话
  3. 必须禁用一些高危函数,其中,可以保留phpinfo这个函数

    disable_functions = exec,passthru,shell_exec,system,popen,proc_open,proc_close,curl_exec,curl_multi_exec,parse_ini_file,show_source,dl,passthru,escapeshellarg,escapeshellcmd

  4. 禁用危险类

    disable_classes = “com”

  5. 禁止显示PHP的版本
    expose_php = Off
  6. 禁用全局变量,这是一个非常可怕的问题,PHP6中已经删除此项设置
    register_globals = Off

现在用Nginx的用户不少,权限配置不是很完善,可以参考下文:
http://www.xpb.cn/blog/665.html