PHP代码审计----一、PHP环境安全

本文阅读 5 分钟

以下部分配置已经在新版本中被剔除掉,不同版本的具体配置可以查看php官网。 参考: PHP手册

1、safe_mode

PHP 安全模式能有效控制一些 PHP 环境中的函数(例如system()函数),对大部分的文件操作函数进行权限控制,同时不允许对某些关键文件进行修改(例如 /etc/passwd)。但是,默认的 php.ini 配置文件并没有启用安全模式。 可以通过修改 php.ini 配置文件启用 PHP 安全模式:

safe_mode = on

2、allow_url_fopen和allow_url_include

allow_url_fopen:是否允许将URL(如http://或ftp://)作为文件处理。 allow_url_include:是否允许include/require打开URL(如http://或ftp://)作为文件处理。 默认情况下:

allow_url_fopen=On
allow_url_include=Off

当allow_url_include为On,就很容易出现文件远程包含漏洞。

4、safe_mode_exec_dir

如果启用了安全模式后,想要执行某些程序的时候,可以指定需要执行程序的主目录,例如:

safe_mode_exec_dir = /usr/bin

一般情况下,如果不需要执行什么程序,建议不要指定执行系统程序的目录。可以指定一个目录,然后把需要执行的程序拷贝到这个目录即可,例如:

safe_mode_exec_dir = /temp/cmd

但是,更推荐不要执行任何程序。这种情况下,只需要将执行目录指向网页目录即可:

safe_mode_exec_dir = /usr/www

注意:执行目录的路径以实际操作系统目录路径为准。

5、magic_quote_gpc

magic_quotes_gpc选项默认是关闭的。如果打开该选项,PHP 将自动把用户提交对 SQL 查询的请求进行转换(例如,把 ’ 转换为 ’ 等),这对于防止 SQL 注入攻击有很大作用,因此建议将该选项设置为:

magic_quotes_gpc = on

注意: 该选项参数在 PHP 5.4.0 以后的版本中已被移除。

6、register_globals

在 PHP 环境中提交的变量,包括使用 POST 或者 GET 命令提交的变量,都将自动注册为全局变量,能够被直接访问。这对服务器是非常不安全的,因此建议将注册全局变量的选项关闭,禁止将所提交的变量注册为全局变量。

register_globals = off

注意: 该选项参数在 PHP 5.3 以后的版本中已被移除。

当然,如果这样设置之后,获取对应变量的时候就需要采取合理方式。例如,获取 GET 命令提交的变量 var,就需要使用$_GET['var']命令来进行获取,在进行 PHP 程序设计时需要注意。

7、open_basedir

使用open_basedir选项能够控制 PHP 脚本只能访问指定的目录,这样能够避免 PHP 脚本访问不应该访问的文件,一定程度下降低了 phpshell 的危害。一般情况下,可以设置为只能访问网站目录:

open_basedir = /usr/www

8、session_use_trans_sid

如果启用 session.use_trans_sid,会导致 PHP 通过 URL 传递会话 ID,这样一来,攻击者就更容易劫持当前会话,或者欺骗用户使用已被攻击者控制的现有会话。

session_use_trans_sid=off

9、display_errors

一般 PHP 环境在没有连接到数据库或者其他情况下会有错误提示信息,错误信息中可能包含 PHP 脚本当前的路径信息或者查询的 SQL 语句等信息,建议禁止该错误提示:

display_errors = Off

如果确实要显示错误信息,一定要设置显示错误信息的级别。例如,只显示警告以上的错误信息:

error_reporting = E_WARNING & E_ERROR

10、expose_php

为了防止攻击者获取服务器中 PHP 版本的信息,可以禁止该信息在 HTTP 头部内容中泄露:

expose_php = off

这样设置之后,攻击者在执行telnet <domain> 80尝试连接服务器的时候,将无法看到 PHP 的版本信息。

11、log_errors

建议在关闭错误提示信息后,对于错误信息进行记录,便于排查服务器运行异常的原因:

log_errors = On

同时,需要设置错误日志存放的目录,建议将 PHP 错误日志与 Apache 的日志存放在同一目录下:

error_log = /usr/local/apache2/logs/php_error.log

注意: 该文件必须设置允许 Apache 用户或用户组具有写的权限。

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/sycamorelg/article/details/118489139
-- 展开阅读全文 --
Web安全—逻辑越权漏洞(BAC)
« 上一篇 03-13
Redis底层数据结构--简单动态字符串
下一篇 » 04-10

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复