PHP代码审计01-环境搭建及PHP核心配置介绍

文章详细介绍了如何搭建WAMP/WNMP环境,包括下载安装phpstudy和选择服务器组件。同时,重点讨论了PHP的核心配置,如register_globals、allow_url_include等,强调了这些配置项的安全隐患,并提供了相关示例。此外,提到了LAMP/LNMP环境在不同Linux发行版的安装脚本。
摘要由CSDN通过智能技术生成

一、WAMP/WNMP环境搭建

        1、下载 phpstudy 安装包:到 phpstudy 官网下载相应平台的安装程序。              Windows版phpstudy下载 - 小皮面板(phpstudy)
        2、安装 phpstudy:打开安装程序,点击“下一步”按钮,根据安装向导指示完成安装过程。
        3、启动 phpstudy:双击桌面上的 phpstudy 快捷方式,启动 phpstudy 控制台。
        4、选择服务器软件:在 phpstudy 控制台中,选择要安装的服务器软件和扩展语言。可以选择 Apache 或者 Nginx 作为 Web 服务器,PHP 作为脚本解释器,以及 MySQL 或 MariaDB 作为数据库管理系统。
        5、配置服务器软件:可以在 phpstudy 中对服务器软件进行配置,如设置 Apache 的虚拟主机、修改 PHP 的配置文件 php.ini、设置 MySQL 数据库的用户名和密码等。
        6、启动服务:在 phpstudy 控制台中启动已安装的服务器软件,并检查服务是否正常运行。

二、LAMP/LNMP环境搭建

Centos安装脚本 :

        yum install -y wget && wget -O install.sh https://notdocker.xp.cn/install.sh && sh install.sh

Ubuntu安装脚本 :

        wget -O install.sh https://notdocker.xp.cn/install.sh && sudo bash install.sh

Deepin安装脚本:

        wget -O install.sh https://notdocker.xp.cn/install.sh && sudo bash install.sh

Debian安装脚本 :

        wget -O install.sh https://notdocker.xp.cn/install.sh && sudo bash install.sh

三、PHP核心配置介绍

        PHP_INI_* 是 PHP 中的一些常量,用于指示 PHP 配置文件 php.ini 中的各种配置项的作用范围。

常量含义
PHP_INI_USER该配置选项可在用户的PHP脚本或Windows注册表中设置
PHP_INI_PERDIR该配置选项可在php.ini. .htaccess或httpd.conf中设置
PHP_INI_SYSTEM该配置选项可在php.ini或httpd.conf中设置
PHP_INI_ALL 该配置选项可在任何地方设置
php.ini only该配置选项仅可在php.ini中设置

        1、register_globals(全局变量注册开关)

        register_globals 配置范围PHP_INI_ALL 。可以将用户提交的 $_REQUEST 数组的元素自动注册为变量,其中包括 $_GET、$_POST 和 $_COOKIE 等。当register_globals = on ,攻击者可以通过构造特定的请求来修改在脚本中使用的变量的值,从而执行恶意行为。 PHP 4.2.0 版本之后,默认情况下禁用了 register_globals,PHP5.4起被废弃。

//访问http://192.168.18.128/1.php?user=admin,返回ture存在该漏洞。
<?php
#$user = 'admin';
if($user=='admin') {
echo 'true';
// do something
}
?>

        2、allow_url-include(是否允许包含远程文件)

        allow_url_include 配置范围PHP_INI_ALL 。用于设置是否允许通过 URL 包含文件。如果 allow_url_include 被设置为 On,PHP 允许包含任何包括在 URL 中的文件,无论它们是否在本地服务器上。这可能会导致安全漏洞,因此默认情况下 allow_url_include 被设置为 Off。PHP 7.0 中已经废弃了 allow_url_include 选项,并在 PHP 8.0 中将其完全删除。

//访问http://192.168.18.128/1.php?a=远程代码。
<?php
include $_GET['a']
?>

        3、magic_quotes_gpc(魔术引导自动过滤)

        magic_quotes_gpc 配置范围PHP_INI_ALL 。当被设置为 On,则对于从客户端发送到服务器的数据(包括 GET、POST 和 COOKIE 数据),PHP 将自动在以下字符前添加反斜杠 "":单引号 '、双引号 "、反斜杠 \ 和 NULL 字符。这些字符在某些情况下可能会破坏代码或引发安全问题,因此自动转义可以帮助防止这些问题的发生,从PHP 5.4.0 开始,magic_quotes_gpc 被废弃并从 PHP 中移除,以后的版本中不再支持 magic_quotes_gpc。

//访问http://192.168.18.128/1.php?a=1',返回 1/'
<?php
echo $_GET['a']
?>

        4、magic_quotes_runtime(魔术引导自动过滤)

        magic_quotes_runtime配置范围PHP_INI_ALL 。 用于自动转义所有的数据。与 magic_quotes_gpc 不同,magic_quotes_runtime 可以自动转义从文件或数据库等来源读取的数据,而不仅仅是 GET、POST 和 COOKIE 数据。如果 magic_quotes_runtime 被设置为 On,则 PHP 将自动在以下字符前添加反斜杠 "":单引号 '、双引号 "、反斜杠 \ 和 NULL 字符,注意:部分函数可绕过该影响。从PHP 5.4.0 开始,magic_quotes_runtime 被废弃并从 PHP 中移除,以后的版本中不再支持 magic_quotes_runtime。

//文件 1.txt
1'2"3\4

//文件1.php
<?php?
ini_set("magic_quotes_runtime","1");
echo file_get_contents("1.txt");
?>

        5、magic_quotes_sybase(魔术引导自动过滤)

       magic_quotes_sybase 配置范围PHP_INI_ALL 。当设为 ON时,PHP 将会使用 Sybase 风格的字符串转义方法对特定字符进行转义,在数据传递进入和离开脚本时自动进行处理。具体地说,magic_quotes_sybase 会将单引号 ' 转义成两个连续的单引号 '',而不是通常使用的反斜线 \ 进行转义。该选项在 PHP 5.3 版本中已被废弃。


        6、safe_mode(安全模式)

        safe_mode 配置范围PHP_INI_SYSTEM 。用于在一个共享服务器上运行多个用户的 PHP 脚本时增加安全性。该选项在 PHP 5.3 版本中被废弃了,并在 PHP 5.4 中被移除。当 safe_mode 开启(设为 On)时,PHP 会限制一些可能会带来安全风险的函数的使用,例如 exec、shell_exec、system 等可以执行系统命令的函数,以及可以访问本地文件系统的函数(如 include、file_get_contents 等)。此外,safe_mode 还限制了 PHP 程序可以访问的文件和目录,防止恶意脚本对系统进行攻击。

        7、open_basedir  PHP访问目录

        open_basedir 配置范围PHP_INI_SYSTEM 。用于限制 PHP 脚本可以访问的文件路径。该选项的作用是将 PHP 能够打开的文件限制在指定的目录树下,包括文件本身,从而增强 PHP 脚本的安全性。

        8、disable_functions(禁用函数)

        disable_functions配置范围是php.ini only 。 用于设置禁用某些函数的列表。这个列表是一个黑名单,里面包含了一些不安全或易被滥用的函数,例如 exec、system 等。启用 disable_functions 后,被列在其内的函数将无法在 PHP 中使用。例如:disable_functions=phpinfo,eval,passthru,exec,system

        9、display_error和error_reporting

        配置范围是PHP_INI_ALL 。display_errors 用于设置是否在网页中显示 PHP 的错误信息,包括语法错误、运行时错误等。当 display_errors 设为 on 时,PHP 错误信息将会在浏览器中输出;而设为 off 时,则会屏蔽错误信息,不会在浏览器中输出。可以通过在 PHP 配置文件 php.ini 或者使用 ini_set() 函数进行设置。
        error_reporting 则用于定义 PHP 当中应该报告哪些类型的错误。它是一个二进制掩码,不同的位数代表了不同类型的错误。例如,E_ERROR 表示致命错误,E_WARNING 表示警告信息,E_NOTICE 表示通知信息等。可以使用 error_reporting() 函数来设置错误报告级别和类型。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值