正文:
随着越来越多的用户使用PHP环境,相关的安全问题也变得越来越重要。PHP 环境提供的安全模式是一个非常重要的嵌入式安全机制。PHP 安全模式可以有效控制 PHP 环境中的一些函数(比如 system()函数),控制大部分文件操作函数的权限,禁止一些关键文件被修改(比如/etc/passwd)。但是,默认的 php.ini 配置文件不支持安全模式。
本文档将介绍如何使用 PHP 的安全模式功能来保护您网站的安全。
首先,启用 PHP 的安全模式
PHP 环境提供的安全模式是一个非常重要的嵌入式安全机制。PHP 安全模式可以有效控制 PHP 环境中的一些函数(比如 system()函数),控制大部分文件操作函数的权限,禁止一些关键文件被修改(比如/etc/passwd)。但是,默认的 php.ini 配置文件不支持安全模式。
您可以通过修改 php.ini 配置文件来启用 PHP 安全模式:
safe_mode = on
二、用户组安全
启用安全模式时,如果 safe_mode_gid 选项关闭,PHP 脚本可以访问该文件,同一用户组的用户也可以访问该文件。
因此,建议您将此选项设置为 off:
safe_mode_gid = off
如果不设置此设置,您可能无法操作服务器网站目录中的文件。
三、安全模式下执行程序主目录
如果您想在启用安全模式后执行一些程序,您可以指定需要执行程序的主目录,例如:
safe_mode_exec_dir = /usr/bin
一般情况下,如果不需要执行任何程序,建议不要指定执行系统程序的目录。您可以指定一个目录,然后将要执行的程序复制到该目录,例如:
safe_mode_exec_dir = /temp/cmd
但是,建议您不要执行任何程序。在这种情况下,只需将执行目录指向 web 目录:
safe_mode_exec_dir = /usr/www
注意:执行目录的路径基于您的实际操作系统目录路径。
四,包括安全模式下的文件
如果需要在安全模式下包含一些公共文件,只需修改以下选项:
safe_mode_include_dir = /usr/www/include/
一般来说,PHP 脚本中包含的文件都是写在程序中的,可以根据你的具体需求进行设置。
五、控制 PHP 脚本可以访问的目录。
使用 open_basedir 选项可以控制 PHP 脚本只能访问指定的目录,这样可以防止 PHP 脚本访问不应该访问的文件,一定程度上减少 phpshell的危害。通常,您可以将其设置为仅访问网站目录:
open_basedir = /usr/www
六、关闭危险功能
如果启用安全模式,则不需要设置功能禁止,但出于安全考虑,建议您设置。例如,如果您不想执行执行命令的 PHP 函数,包括 system()和可以查看 PHP 信息的 phpinfo()等函数,可以通过以下设置禁用这些函数:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl
如果要禁止对任何文件和目录的操作,可以关闭以下与文件相关的操作。
disable_functions = system, passthru, exec, shell_exec, popen, phpinfo, escapeshellarg, escapeshellcmd, proc_close, proc_open, dl
注:以上设置只列出了一些常用的文件处理功能。您还可以将上述命令执行功能与这些文件处理功能结合起来,以抵御大多数 phpshell 威胁。
七、关闭 PHP 版本信息在 HTTP 头中的泄露
为了防止黑客获取服务器中的 PHP 版本信息,可以在 HTTP 头中禁止这些信息泄露:
expose_php = off
在这个设置之后,当黑客试图通过执行 telnet 80 连接到您的服务器时,他们将看不到 PHP 的版本信息。
八、关闭全局变量的注册
PHP 环境下提交的变量,包括使用 POST 或 GET 命令提交的变量,都会自动注册为全局变量,可以直接访问。这对你的服务器非常不安全,所以建议你关闭注册全局变量的选项,禁止提交的变量注册为全局变量。
register_globals = off
注意:这个选项参数在 PHP 5.3 以后的版本中已经被删除了。
当然,如果设置了这个,就需要采取合理的方式来获取相应的变量。比如获取 GET 命令提交的变量 var,需要使用$ _ get [‘var’]命令获取,设计 PHP 程序时需要注意。
九、SQL 注入保护
SQL 注入是一个非常危险的问题,小到网站后台的入侵,大到整个服务器的沦陷。
默认情况下,magic_quotes_gpc 选项是关闭的。如果打开此选项,PHP 将自动转换用户对 SQL 查询的请求(例如,将’转换为\ ‘等)。),这对防止SQL 注入攻击有很大作用,所以建议您将此选项设置为:
magic_quotes_gpc = on
注意:这个选项参数在 PHP 5.4.0 以后的版本中已经被删除了。
十、错误信息控制
一般 PHP 环境在没有连接到数据库或者其他情况下会有错误提示信息,错误信息中可能包含 PHP 脚本当前的路径信息或者查询的 SQL 语句等信息,这类信息如果暴露给黑客是不安全的,因此建议您禁止该错误提示:
display_errors = Off
如果您确实要显示错误信息,一定要设置显示错误信息的级别。例如,只显示警告以上的错误信息:
error_reporting = E_WARNING & E_ERROR
注意: 强烈建议您关闭错误提示信息。
十一、错误日志
建议您在关闭错误提示信息后,对于错误信息进行记录,便于排查服务器运行异常的原因:
log_errors = On
同时,需要设置错误日志存放的目录,建议您将 PHP 错误日志与 Apache 的日志存放在同一目录下:
error_log = /usr/local/apache2/logs/php_error.log
注意: 该文件必须设置允许 Apache 用户或用户组具有写的权限。
十二、升级 PHP 版本
PHP 新特性很好用。
较之前版本速度提升 2-3 倍。
转载请注明:汇站网 » 如何利用 PHP 的安全模式功能来增强您网站的安全性