php://filter的简单介绍
内容概要:
- 1、以下哪些是PHP伪协议
- 2、PHP如何实现数据过滤?通过filter_var确保输入安全
- 3、手撕CTFHub-Web(七):RCE
- 4、如何在PHP中过滤数组元素?array_filter()函数的使用技巧
- 5、如何从PHP数组中提取一部分元素?
以下哪些是PHP伪协议
PHP伪协议是PHP中用于在没有实际协议的情况下访问外部资源的特有语法。它使用php://前缀,后接一个标识资源类型的标识符。以下是PHP中可用的伪协议类型:php://input:用于读取HTTP请求的原始数据。php://output:用于将输出发送到HTTP响应。php://stdin:用于从标准输入读取数据。
PHP 伪协议是一种特殊的 URI 方案,用于在 PHP 脚本中包含或访问不同类型的数据源。以下是 PHP 支持的主要伪协议及其用途:file://用于包含文件系统中的文件。例如:include file://path/to/file.php;phar://用于包含 PHAR(PHP 归档文件)中的文件。
PHP伪协议是PHP支持的一系列特殊协议与封装协议,用于文件操作或数据流处理,在CTF(网络安全竞赛)中常被利用实现文件包含、源码泄露等攻击。核心协议类型及用途PHP伪协议主要分为以下三类,共12种:本地/远程文件访问协议 file://:直接访问本地文件系统,无需开启allow_url_fopen。
PHP伪协议是一种特殊的文件访问方式,它允许程序通过特定的协议来访问文件或执行代码。常见的PHP伪协议包括:file://:访问本地文件系统。http://和https://:访问HTTP(s)网址。ftp://和ftps://:访问FTP(s)URL。
PHP伪协议利用:php://input:通过POST数据传入恶意代码,绕过文件扩展名限制。?file=php://input&content=?php system(id); ?data://:直接嵌入Base64编码的PHP代码。?file=data://text/plain,?php system(id); ?file://:读取本地文件(LFI场景)。
PHP如何实现数据过滤?通过filter_var确保输入安全
核心函数与过滤器类型filter_var是PHP内置的过滤函数,语法为:mixed filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0)$value:待过滤的数据(字符串、变量等)。$filter:指定过滤器类型(预定义常量或自定义ID)。
最佳实践总结验证与净化结合:先验证数据格式,再净化潜在恶意内容。优先使用内置过滤器:避免重复造轮子,减少安全漏洞。明确业务需求:根据场景选择合适的过滤器和选项(如IP类型、URL结构)。保持编码统一:确保输入数据与过滤器编码一致(通常为UTF-8)。
数据类型验证使用PHP内置函数检查输入类型是否符合预期:is_numeric():验证数字输入(如年龄、价格)。is_string():确保文本输入为字符串类型。is_array():处理数组形式的数据(如多选表单)。is_bool():检查布尔值(如开关选项)。
手撕CTFHub-Web(七):RCE
在深入探讨 RCE(远程代码执行)的实现过程中,我们首先聚焦于 PHP 中的 eval 函数。eval 函数允许执行 PHP 字符串,通常通过接收 POST 或 GET 方法提交的数据,如 cmd 参数。这允许执行如 `system(ls)` 这样的命令,以查看当前目录。
RCE的实现方法主要包括以下几点:利用 eval 函数:直接执行命令:通过 POST 或 GET 方法提交的数据来执行 PHP 字符串,例如 system 以查看当前目录。未过滤输入风险:若没有对输入进行过滤,攻击者可利用此漏洞连接到菜刀服务器。
如何在PHP中过滤数组元素?array_filter()函数的使用技巧
基本用法:按值过滤回调函数仅接收数组值作为参数,返回true时保留元素。
Array( [b] = 2 [c] = 3) 重置键:使用array_valuesarray_filter会保留原数组的键,若需重置为数字索引,可结合array_values使用。
基础用法:explode + array_filter默认过滤分割字符串:用explode()按分隔符拆分字符串为数组。过滤空值:用array_filter()默认移除所有empty()为true的元素(如、null、false、0、0.0、[])。
如何从PHP数组中提取一部分元素?
在PHP中,从数组提取部分元素可通过array_slice()和array_filter()实现,具体方法及适用场景如下:使用array_slice()提取指定范围元素功能:从数组中提取连续的一段元素,不修改原数组。
它的用法也很简单:array_rand($arr[, $num])$arr == 用来取元素的数组$num == 随机取下标的个数其中第二个参数 $num 是可选的,默认为1 。注意:它的返回值在第二个参数大于 1 的时候是一个数组;当第二个参数不设或者传值 1 的时候是一个下标。
在PHP中,可以使用array_slice()函数从数组末尾提取元素。具体方法如下:定义要切片的数组:首先,需要有一个数组作为操作对象。使用array_slice()函数:调用该函数时,将负索引-n作为第二个参数,其中n表示要从数组末尾提取的元素数量。负索引从数组末尾开始计数。
在PHP中,从二维数组提取满足特定条件的元素可通过自定义函数实现,核心思路是遍历数组并匹配条件,返回目标字段值或默认值。以下是具体实现方法及示例:方法实现定义函数:创建函数接收二维数组、条件键名、条件值及目标字段名作为参数。遍历数组:使用foreach循环逐个检查子数组。
