PHP安全 [环境变量]

Posted 王小帥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP安全 [环境变量]相关的知识,希望对你有一定的参考价值。

超全局变量

php中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行global $variable;就可以访问它们∶

$GLOBALS ,$_SERVER,$_GET,$_POST ,$_FILES , $_COOKIE,$_SESSION ,$_REQUEST、$_ENV

它们受到variables_order变量的控制。

$_SERVER

PHP环境变量允许开发者的脚本从服务器动态收集某些类型的数据。保证PHP程序在不同服务器正确运行。例如DOCUMENT_ROOT,CONTEXT_DOCUMENT_ROOT变量将自动获得网站的根目录,而无需在脚本中进行任何更改。

php.ini

配置文件( php.ini)在PHP启动时被读取。对于服务器模块版本的PHP,仅在 Web服务器启动时读取一次。cli(命令行)每次使用重新读取。php.ini内部 variables_order参数控制着超全局变量。

phpinfo()

输出PHP当前状态的大量信息,包含了PHP编译选项、启用的扩展、PHP 版本、服务器信息和环境变量(如果编译为一个模块的话)、PHP环境变量、操作系统版本信息、path 变量、配置选项的本地值和主值、HTTP头和PHP授权信息( License )。从 php.ini 配置获取。常常关联着敏感信息泄露的问题。

具体:确切的PHP版本、操作系统和它的版本、PHP详细配置、IP地址信息、服务器的环境变量、PHP扩展及其配置;

敏感信息泄露本身并不危险,但是配合着其他漏洞,服务器面临的威胁就大增,比如:

容器版本泄露:可能配合Apache这个版本的CVE漏洞,获取shell

真实IP泄露:直接绕过CDN,得到真实IP,后续可继续查旁站IP和C段

禁用的方法:在构造木马webshell的过程,需要知道哪些方法是被禁用了的,有针对的过滤。

限定访问位置:PHP能够访问的目录是否有限制

短标签的使用:<?php ?>是PHP程序标准形式,打开此开关,将允许<? ?>,在构造shell过程中有帮助。

缓存:缓存PHP文件,文件类型为~.bin,配合文件上传(一般不过滤bin)覆盖,再调用达到加载恶意文件的目的。

Phar的利用:使用Phar://伪协议流可以Bypass 一些上传的 waf,大多数情况下和文件包含一起使用,同时关联,一些反序列化漏洞。

支持的程序:服务器是否加载了Redis、Memcache、MongoDB、mysql、cURL还有Gopher。 

网站根目录:配合SQL注入漏洞,如SQLmap的 -os-shell,直接获取shell。

本地(远程)文件包含

allow_url_fopen:默认开启,关闭会导致应用程序故障,本地文件包含

allow_url_include: 默认关闭,如果打开,易出现远程文件包含漏洞。

文件包含漏洞:程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP中居多其他语言编写的程序相对较少。

以上是关于PHP安全 [环境变量]的主要内容,如果未能解决你的问题,请参考以下文章

PHP MODx - 获取模板变量片段

Windows 7 下如何配置PHP网站运行环境

php变量可以安全地保存有害代码吗? [关闭]

URL的PHP​​和哈希/片段部分

在 PHP 网站应用程序中设置环境变量的“正确”方法?

AWS OpsWorks 应用程序层:无法从 PHP 应用程序访问环境变量