PHP伪协议详解

PHP伪协议详解

  • 一、前言
    • 1.什么是PHP伪协议?
    • 2.什么时候用PHP伪协议?
  • 二、常见的php伪协议
    • php://input
    • php://filter
    • zip://与bzip2://与zlib://协议
    • data://
    • phar://

PHP伪协议详解

一、前言

1.什么是PHP伪协议?

PHP伪协议是PHP自己支持的一种协议与封装协议,简单来说就是PHP定义的一种特殊访问资源的方法。

有些伪协议成功执行需要allow_url_fopen和allow_url_include的支持。

allow_url_fopen On/Off 允许或禁止打开URL文件
allow_url_include On/Off 允许或禁止引用URL文件


2.什么时候用PHP伪协议?

文件包含!!!的时候,可能遇到的文件包含函数:
1、include
2、require
3、include_once
4、require_once
5、highlight_file
6、show_source
7、flie
8、readfile
9、file_get_contents
10、file_put_contents
11、fopen (比较常见)


二、常见的php伪协议

php://input

php://input 是个可以访问请求的原始数据的只读流,获取POST请求数据的协议

当enctype=”multipart/form-data” 的时候 php://input 是无效的。

php://input 伪协议 成功执行前提
php.ini 中的 allow_url_include设置为On

格式示例:

php
<?php
@include($_GET["file"]);
?>

php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。

在利用上很多都是与包含函数结合使用,读入或者输出获取文件源码然后编码让其不执行从而输出

php://filter 的使用:

php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php

php://filter 伪协议组成:
read=<读链的筛选列表>
resource=<要过滤的数据流>
write=<写链的筛选列表>
php://filter/read=处理方式(base64编码,rot13等等)/resource=要读取的文件

read 对应要设置的过滤器:
常见的过滤器分字符串过滤器、转换过滤器、压缩过滤器、加密过滤器
其中convert.base64-encode ,convert.base64-decode都属于 转换过滤器

格式示例:

<?php
$a=($_GET["file"]);
echo(file_get_contents($a));//获取文件内容
?>

zip://与bzip2://与zlib://协议

zip:// 等属于压缩流的协议,通过直接压缩普通文件为zip文件,再通过zip:// 协议读取,可以直接执行php代码。压缩后的zip文件可以随意修改后缀也不影响zip://协议读取。(注意是如phpinfo.txt直接压缩为zip,而不是文件夹压缩zip)

格式示例:

<?php
$a=($_GET["file"]);
include($a);
?>

压缩及协议访问格式:

压缩文件为.zip后缀
zip://绝对路径/phpinfo.zip%23phpinfo.php
压缩文件为.bz2后缀
compress.bzip2://绝对路径/phpinfo.zip/phpinfo.php
压缩文件为.gz后缀
compress.zlib://绝对路径/phpinfo.zip/phpinfo.php


data://

data://伪协议可以通过请求提交的php代码数据配合文件包含函数可以达到代码执行效果。

data://伪协议 成功执行前提
php.ini设置allow_url_include 与allow_url_open都为On。

data://协议的格式是: data://数据流封装器,相应格式数据

格式示例:

<?php
$a=($_GET["file"]);
include($a);
?>

phar://

phar://伪协议可以对zip格式压缩包进行访问解析

格式示例:

phar://绝对路径\phpinfo.zip\phpinfo.php

注意这里与zip://不同的地方是,phar访问压缩包内容是通过/访问,而zip是通过#访问


Python老吕提醒
使用这些伪协议时,需要注意PHP配置和服务器环境的限制,某些协议可能因为配置或安全原因被禁用。
特别是在处理外部资源(如HTTP或FTP)时,需要注意安全性,确保不会暴露敏感信息或遭受注入攻击。
在使用 data://、phar:// 等伪协议时,应特别注意数据的验证和清洁,以避免安全漏洞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马微服务常见面试题

常见面试题 1.微服务篇 1.1.SpringCloud常见组件有哪些&#xff1f; 问题说明&#xff1a;这个题目主要考察对SpringCloud的组件基本了解 难易程度&#xff1a;简单 参考话术&#xff1a; SpringCloud包含的组件很多&#xff0c;有很多功能是重复的。其中最常用组件包括&…

hive实战项目:旅游集市数仓建设

旅游集市数仓建设 文章目录 旅游集市数仓建设为什么要设计数据分层&#xff1f;分层设计ODS&#xff08;Operational Data Store&#xff09;&#xff1a;数据运营层DW&#xff08;Data Warehouse&#xff09;&#xff1a;数据仓库层DWD&#xff08;Data Warehouse Detail&…

在亚马逊云科技上开启您的多机多卡分布式训练之旅

随着机器学习模型规模的扩大和数据量的增加&#xff0c;单个设备的计算能力和内存容量逐渐成为瓶颈。这导致训练过程变得缓慢且耗时长&#xff0c;限制了模型的进一步发展和改进。为了解决这个问题&#xff0c;分布式训练应运而生。它利用多个计算资源并行地执行计算任务&#…

我为什么选择大数据和技术人生两三事

程序员如何选择职业赛道&#xff1f; 程序员的职业赛道就像是一座迷宫&#xff0c;有前端的美丽花园&#xff0c;后端的黑暗洞穴&#xff0c;还有数据科学的神秘密室。你准备好探索这个充满挑战和机遇的迷宫了吗&#xff1f; 选择一个职业赛道&#xff0c;无外乎起点飘着兴趣&a…

计算机网络——24路由器组成

路由器组成 路由器的结构概况 高层面(非常简化的)通用路由器体系架构 路由&#xff1a;运行路由选择算法&#xff0f;协议 (RIP, OSPF, BGP) - 生成 路由表转发&#xff1a;从输入到输出链路交换数据报 - 根据路由表进行分组的转发 输入端口功能 分布式交换&#xff1a; 根…

AI大模型与小模型之间的“脱胎”与“反哺”(第四篇)

76. **动态领域适应网络&#xff08;Dynamic Domain Adaptation Networks, DDANs&#xff09;**&#xff1a; 创建能动态调整自身参数以适应新行业特性的网络结构&#xff0c;使得AI大模型能在不完全重新训练的情况下快速适应新的业务场景和环境变化。 77. **元学习中的元策略优…

MySQL--优化(索引)

MySQL–优化&#xff08;SQL语句执行慢&#xff0c;如何分析&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 索引 索引&#xff08;index&#xff09;是帮助 MySQL 高效获取数据的数据结构&#xff…

大语言模型在科技研发与创新中的角色在快速变化

在技术研发与创新中&#xff0c;比如在软件开发、编程工具、科技论文撰写等方面&#xff0c;大语言模型可以辅助工程师和技术专家进行快速的知识检索、代码生成、技术文档编写等工作。在当今的软件工程和研发领域&#xff0c;尤其是随着大语言模型技术的快速发展&#xff0c;它…

【码银送书第十三期】《ChatGPT原理与架构》

OpenAI 在 2022 年 11 月推出了人工智能聊天应用—ChatGPT。它具有广泛的应用场景&#xff0c;在多项专业和学术基准测试中表现出的智力水平&#xff0c;不仅接近甚至有时超越了人类的平均水平。这使得 ChatGPT 在推出之初就受到广大用户的欢迎&#xff0c;被科技界誉为人工智能…

在Mac上安装nginx+rtmp 本地服务器

需要使用终端命令&#xff0c;如果没有Homebrew&#xff0c;要安装Homebrew,执行&#xff1a; ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 一、安装Nginx 1、先clone Nginx项目到本地&#xff1a; brew tap de…

20240305-2-海量数据处理常用技术概述

海量数据处理常用技术概述 如今互联网产生的数据量已经达到PB级别&#xff0c;如何在数据量不断增大的情况下&#xff0c;依然保证快速的检索或者更新数据&#xff0c;是我们面临的问题。 所谓海量数据处理&#xff0c;是指基于海量数据的存储、处理和操作等。因为数据量太大无…

js SheetJS 合并表格导出到同一个excel中

最近有个需求,我在一个页面显示了4个表格, 然后合并导出到excel文件中 四个表,四个sheet,一个excel文件 最后导出时这样: 实现: 1,页面有个导出的checkbox,勾选则导出,不勾选不处理 2,在一个函数中,集中处理四个表数据获取,并将结果返回出来 //获取数据后返回为…

bun 单元测试

bun test Bun 附带了一个快速、内置、兼容 Jest 的测试运行程序。测试使用 Bun 运行时执行&#xff0c;并支持以下功能。 TypeScript 和 JSX生命周期 hooks快照测试UI 和 DOM 测试使用 --watch 的监视模式使用 --preload 预加载脚本 Bun 旨在与 Jest 兼容&#xff0c;但并非所…

Linux搭建SFTP服务器

案例&#xff1a;搭建SFTP服务器 SFTP&#xff08;SSH文件传输协议&#xff09; SFTP&#xff08;SSH文件传输协议&#xff09;是一种安全的文件传输协议&#xff0c;用于在计算机之间传输文件。它基于SSH&#xff08;安全外壳协议&#xff09;的子系统&#xff0c;提供了加密的…

1908_Arm Cortex-M3的实现

1908_Arm Cortex-M3的实现 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) 这是第一次看一份这样的手册&#xff0c;之前的MCU编程基本上就是专注于软件接口方面。而OS等方面的一些功能基本上都是用了现成的解决方案&#xff0c;因此也就没有过多的关注…

git合并多次提交

简介 Git是一个分布式版本控制系统&#xff0c;它允许开发人员在不同的分支上进行并行开发&#xff0c;并将这些分支合并到主分支或其他分支中。在开发过程中&#xff0c;我们经常会创建多个commit来记录每次的代码变更。有时候我们希望将这些连续的commit合并为一个更有意义的…

CSS实现选中卡片样式操作

图一默认自动选中&#xff0c;并且不可取消选中&#xff0c;当选择其他卡片才可点击下一步 在 “ src/assets ” 路径下存放 save.png&#xff0c;代表选中的状态 <div class"cards"><ul class"container"><li v-for"image in image…

【前端系列】vue

这里写目录标题 一、Vue简介1.1 主流前端框架/库简介 二、下载和安装Vue2.1 下载2.2 安装完成后&#xff0c;检查2.3创建全局安装目录和缓存日志目录2.4 为了下载包快速&#xff0c;改源为淘宝镜像2.5 查看npm配置修改是否成功 三、配置环境变量环境变量—用户变量—选中Path—…

Vue+SpringBoot打造实验报告管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 实验管理模块2.2 实验实例模块2.3 实验批阅模块2.4 实验咨询模块 三、系统展示四、核心代码4.1 查询实验4.2 新增实验咨询4.3 回复实验咨询4.4 新增实验实例4.5 查询实验实例 五、免责说明 一、摘要 1.1 项目介绍 基于…

【学习笔记】卫星基础知识

一、什么是卫星以及它如何工作&#xff1f; 通信卫星是一种人造卫星&#xff0c;通过使用转发器在源和接收器之间中继和放大无线电电信信号。卫星的工作原理是接收从地球发送的无线电信号并将无线电信号重新发送回地球。卫星使用从大型太阳能电池阵列收集的太阳能&#xff0c;…