Linux下PHP+Apache的26个必知的安全设置(3)

我还建议,你应在httpd.conf中执行ServerTokens和ServerSignature命令,隐藏Apache版本及其他信息(http://www.cyberciti.biz/faq/rhel-centos-hide-httpd-version/)。

第4个设置项:尽量减少可装入的PHP模块(动态加载模块)

PHP支持“动态加载模块”(Dynamic Extensions)。默认情况下,RHEL装入/etc/php.d/目录里面的所有加载模块。要启用或禁用某一个模块,只要在/etc/php.d/目录中找到配置文件、为模块名称添加注释。你还可以更名或删除模块配置文件。想获得最佳的PHP性能和安全,你应该只启用Web应用程序需要的加载模块。比如说,要禁用gd加载模块,输入以下命令:

#cd/etc/php.d/
# mv gd.{ini,disable}
# /sbin/servicehttpd restart

要启用名为gd的php模块,请输入:

# mv gd.{disable,ini}
# /sbin/service httpd restart

第5个设置项:将所有PHP错误记入日志

别让PHP错误信息暴露在网站的所有访客面前。编辑/etc/php.d/security.ini,执行以下指令:

display_errors=Off

确保你将所有PHP错误记入到日志文件中(http://www.cyberciti.biz/tips/php-howto-turn-on-error-log-file.html):

log_errors=On

error_log=/var/log/httpd/php_scripts_error.log

第6个设置项:不允许上传文件

出于安全原因,编辑/etc/php.d/security.ini,执行以下命令:

file_uploads=Off

如果使用你应用程序的用户需要上传文件,只要设置upload_max_filesize(http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/),即可启用该功能,该设置限制了PHP允许通过上传的文件的最大值:

file_uploads=On

用户通过PHP上传的文件最大1MB

upload_max_filesize=1M

第7个设置项:关闭远程代码执行

如果启用,allow_url_fopen允许PHP的文件函数——如file_get_contents()、include语句和require语句——可以从远程地方(如ftp或网站)获取数据。

allow_url_fopen选项允许PHP的文件函数——如file_get_contents()、include语句和require语句——可以使用FTP或HTTP协议,从远程地方获取数据。

编程员们常常忘了这一点,将用户提供的数据传送给这些函数时,没有进行适当的输入过滤,因而给代码注入安全漏洞留下了隐患。基于PHP的Web应用程序中存在的众多代码注入安全漏洞是由启用allow_url_fopen和糟糕的输入过滤共同引起的。编辑/etc/php.d/security.ini,执行以下指令:

allow_url_fopen=Off

出于安全原因,我还建议禁用allow_url_include:

allow_url_include=Off

第8个设置项:启用SQL安全模式

编辑/etc/php.d/security.ini,执行以下指令: