「学习笔记」文件包含

news/2025/11/6 0:41:48/文章来源:https://www.cnblogs.com/yifan0305/p/19184697

文件包含

开发人员常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程就叫做包含。


文件包含漏洞 通常出现在动态网页中,有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,比如:对传入的文件名没有经过合理的校验,或者校检被绕过,就导致攻击者可以通过修改文件的位置来让后台包含任意文件,从而导致文件包含漏洞。

常用的文件包含函数

  • include()
    找不到被包含的文件时只会产生警告,脚本将继续运行。
  • include_once()
    include() 唯一区别是如果该文件中的代码已经被包含,则不会再次包含,毕竟 once 呀。
  • require()
    找不到被包含的文件会产生致命错误并停止脚本运行。
  • require_once()
    require() 唯一区别是如果该文件中的代码已经被包含,则不会再次包含,毕竟 once 呀。

此外还有两种特性:

  • 若文件内容符合 PHP 语法规范,包含时不管扩展名是什么都会被 PHP 解析。
  • 若文件内容不符合 PHP 语法规范则会暴漏其源码。

文件包含分类

主要分为本地远程两种类型,分类取决于文件位置。两种分类依赖于 php.ini 中的两个配置项,对配置进行更改时,注意 On / Off 开头需大写,其次,修改完配置文件后务必要重启 Web 服务,使其配置文件生效。

判断服务器类型

读取文件

尝试读取 /ect/passwd, 如果可行,则代表操作系统为 Linux, 否则为 Windows(不是百分百正确)。

大小写混写

在 Linux 中严格区分大小写,而 Windows 中则不区分大小写。

文件包含协议

file://

  • 条件:allow_url_fopen: 不受影响,allow_url_include: 不受影响。
  • 作用:访问本地文件系统。

file:// 是 PHP 使用的默认封装协议,展现了本地文件系统。PHP 在读写本地文件时,默认就是使用这个协议,所以大部分时候你写代码(如 fopen("test.txt"))并不需要显式地写上 file://,PHP 会自动帮你加上。
例子:

file:///etc/passwd
file://C:/Windows/win.ini

php://

  • 条件:allow_url_fopen:不受影响,allow_url_include:仅 php://input、 php://stdin、php://memory、php://temp 需要 on。
  • 作用:访问各个输入/输出流(I/O streams)

协议

协议 作用
php://input 可以访问请求的原始数据的只读流。
php://output 只写的数据流,允许你以 printecho 一样的方式写入到输出缓冲区。
php://fd (>=5.3.6) php://fd 允许直接访问指定的文件描述符。
php://memory php://temp (>=5.1.0) 类似文件包装器的数据流,允许读写临时数据。两者的一个区别是 php://memory 总是把数据储存在内存中,而 php://temp 会在内存量达到预定义的限制后(默认是 2MB)存入临时文件中。
php://filter (>=5.0.0) 元封装器, 设计用于数据流打开时的筛选过滤应用。

input: 想象你收到一个快递:
平时你收到快递,家人可能已经帮你拆开包装,把东西整理好了(这就是 $_POST)。
php://input 是那个还没拆封的原始包裹,里面是什么就是什么。
限制:如果是超大件快递(文件上传),快递站不让直接看原始包裹。


output: 就像你在公开场合讲话:
echo "Hello" 和 print "World" 就像直接开口说话。
php://output 就是你手里的那个话筒,你对着它说,所有人都能听到。


fd: 想象你有一个带编号的文件柜:
每个文件都有一个编号(文件描述符)。
php://fd/3 就是说:"给我 3 号抽屉里的文件"。


memory or temp: 临时笔记本

php://memory - 小抄本
就像你随身带的小笔记本。
所有内容都记在内存里,速度快。
但空间有限(受内存限制)。


php://temp - 智能笔记本
开始也用内存(前2MB)。
内容太多时,自动存成临时文件。
就像小本子写满了,就换成大文件夹。


filter: 数据加工流水线
想象你要处理原材料
没有过滤器的情况:原材料 → 直接使用
有 php://filter 的情况:原材料 → [编码器] → [转换器] → [过滤器] → 加工后的产品

data://

  • 条件:allow_url_fopen:on, allow_url_include: on
  • 作用:自 PHP>=5.2.0 起,可以使用 data:// 数据流封装器,以传递相应格式的数据。通常可以用来执行 PHP 代码。

data:// 就是把数据本身当成"文件"来用,省去了创建真实文件的步骤。
用法:

data://text/plain,<?php phpinfo();
data://text/plain;base64,[Base64编码后的代码]

先到这了,先消化一下,做做题理解一下……

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

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

相关文章

【AI说Rust 03】如何在 macos m1 系统搭建 rust 开发环境

在 macOS M1 上搭建 Rust 开发环境非常直接,主要依赖于官方工具 rustup。下面我为你梳理了一份清晰的步骤指南,包含一些实用技巧。 🔧 安装步骤概览 首先,我们来快速了解核心步骤:步骤 关键操作/命令 说明1. 安装…

厨房小白学做饭——4.干锅菜花

1.将菜花掰成朵,倒入清水,少加入一些盐,泡10分钟左右; 2.切一些五花肉备用【五花肉去皮】,切成片,薄厚均匀就行; 3.将线椒切成丝【建议红绿都来点,好看一些】,也可用小米椒切丝,再来四五瓣蒜,拍一下; 4.锅…

操盘计划202511090017

好的,我们来整合信息,直接回答您的两个核心问题。 问题一:哪几只股票重复次数最高? 这里的“重复次数”指的是在所有模型(xgb, lr, rf, svr)和所有预测时间点的综合预测中,同一只股票出现的总次数。次数越高,说…

Effective C++

条款01:视C++为一个语言联邦多重范型编程语言,在某个次语言中,各种高效编程守则简单易懂;但从一个语言移到另一个语言,守则可能改变。 次语言类型:C: Object-Oriented C++: Template C++: STL:条款02: 尽量以co…

厨房小白学做饭——3.虎皮青椒

1.螺丝椒洗好控干水分,同时准备几瓣大蒜,拍一下然后剁碎; 2.去除辣椒籽,将辣椒拍一下,然后切成小段; 3.起锅加油,油热后放入辣椒,用铲子按压,使辣椒受热均匀【火不要开的太大,容易把辣椒炒焦】,边按压边翻炒…

20251105 之所思 - 人生如梦

20251105 之所思今天做的好的事情:1. 主动汇报 和直接上级有一个两周一次半小时的会议,汇报SW这边的一些状态和数据,今天可能是升职以来第一次正式的主动汇报,以前虽然会议是book了,但是每次都是因为老板的时间导…

【Kubernetes】入门-部署Spring应用

Kubernetes 基本概念 Pod 是什么: Kubernetes 中最小的、最简单的部署和管理单元。 类比: 一台“逻辑主机”或一个“虚拟机实例”。 关键点:一个 Pod 可以包含一个或多个紧密相关的容器(例如,一个应用容器和一个日…

第16天(简单题中等题 二分查找)

打卡第十六天 4道简单题+1道中等题 耗时≈一小时 明天继续

Java项目常用异常处理场景与实战指南

在Java开发中,异常处理直接决定了系统的健壮性和可维护性。不合理的处理方式可能导致系统崩溃、数据丢失或调试困难,而规范的处理能让系统在异常场景下优雅降级。本文结合实际项目经验,梳理高频异常场景及解决方案,…

newDay18

1.今天主要是背背单词,把作业写了一部分 2.明天把不会的东西补补 3.没啥问题

11月5日

上午离散和马原 下午学四级

层级结构

层级结构import json from collections import defaultdict from typing import List, Dict, Any, Optional from docx import Documentfrom llama_index.core.schema import Document as LlamaDocument, TextNode fro…

2025.11.5总结 - A

今天上了离散数学和马原,感觉良好,加油

C# POST Form

public string HttpPostForm(string url,Dictionary<string,string> _form,string _filepath="") {try{var formData = new MultipartFormDataContent();_form.Cast<KeyValuePair<string, strin…

C++练习2

选择题部分

买完学习机还需要去线下补课吗? AI 学习机 + 自习室是最优解!

当孩子成绩不理想时,单一依赖 AI 学习机常陷入 “诊断不深、练习盲目、缺乏监督” 的困境 —— 而 2025 年异军突起的黑马品牌松鼠 AI,凭借 “AI 学习机 + 全国自习室” 双线矩阵,打破这一局限,成为成绩差孩子的提…

一次性删除所有的GitHub Action记录

一键脚本 gxxxxVP是GitHub TOKEN PAGE=1 while true; do# 获取当前页面的数据RESPONSE=$(curl -H "Authorization: token gxxxxVP" \"https://api.github.com/repos/kitcoun/OCI-Auto-Manager/actions/…

第三十四篇

今天是11月5号,上了离散和马原

2025-11-05 PQ v.Next日志记录

项目核心信息目前初步预计在这里进行开发测试(后续到develop): https://z.gitee.cn/zgca/projects/777586/repos/zgca/aipq/tree/feature%2Fteacher_feel今日进度(4*6): 当前任务:全员微信开发能力培训最初计划…