网网络安全基础之php开发 文件读取、写入功能的实现

前言

续之前的系列,这里php开发的文件操作的内容读取以及文本写入的部分

文件读取代码的实现

css代码

本系列的php博客都是这个css,名字都是index.css

/* css样式初始化 */
* {
    font-family: 'Poppins', sans-serif;
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    outline: none;
    border: none;
    text-decoration: none;
    text-transform: capitalize;
    transition: .2s linear;
}

html {
    font-size: 62.5%;
}
/* header样式初始化*/
.header {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 1000;
    background: #3F3D56;
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.header .logo {
    color: white;
    padding: 0 1rem;
}
/* 导航样式 */
.navbar ul{
    display: flex;
}

.navbar ul li{
    font-weight: bold;
    width: 128px;
    list-style: none;
    text-align:center;
}
.navbar ul li a {
    width: 128px;
    line-height: 45px;
    font-size: 1.7rem;
    color: white;
}
.navbar ul li a:hover{
    color: #009933;
}
/* 二级菜单样式 */
.navbar ul li ul{
    position: absolute;
    display: none;
    width: 128px;
    line-height: 45px;
}

.navbar ul li ul li{
    background-color: #3F3D56;
}
/* 悬浮展开二级菜单 */
.navbar ul li ul li a:hover{
    color: white;
}
.navbar ul li ul li:hover{
    background-color: #009933;
}

.navbar ul li:hover ul{
    display: block;
}
/* 网站内容*/
.content{
    margin-top:50px;
}

/*让文件下载的文件列表居中显示*/
.download-links {
    text-align: center; /* 使链接居中 */
    font-family: 'LiSu', 'STLiti', cursive; /* 尝试使用隶书字体,如果不可用则退回到通用草书字体 */
    font-style: italic; /* 设置字体为斜体 */
}

.download-links ul {
    list-style: none;
    padding: 0;
    margin: 0;
    display: inline-block; /* 使 <ul> 内容居中对齐 */
}

.download-links li {
    margin: 10px; /* 添加一些间距 */
}

.download-links a {
    font-size: 18px; /* 可以根据需要调整大小 */
    text-decoration: none;
    color: #000;
}

.download-links a:hover {
    text-decoration: underline;
}

文件内容的读取

新建一个文件file_read.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Head</title>
    <link rel="stylesheet" href="index.css">
</head>
<body>
<div class="header">
    <a href="index.html" class="logo">
        <h1>wushiyiwuzhong</h1>
    </a>
    <nav class="navbar">
        <ul>
            <li><a href="file_index.php">文件功能导航</a></li>
            <li><a href="file_upload.php">文件上传</a></li>
            <li><a href="file_downlaod.php">文件下载</a></li>
            <li><a href="#">文件删除</a></li>
            <li><a href="#">文件读取</a></li>
            <li><a href="#">文件写入</a></li>
        </ul>
    </nav>
</div>

<div class="download-links">
    <ul>
        <?php
        $files = scandir('.');//扫描当前目录
        $files = array_filter($files, function($file) {
            return is_file($file);
        });

        foreach ($files as $file) {
            // 创建下载链接,指向 download.php,并传递 filename 参数
            echo '<li><a href="file_read.php?filename=' . urlencode($file) . '">' . htmlspecialchars($file) . '</a></li>';
        }
        ?>
    </ul>
</div>
</body>
</html>

<?php
// 读取 filename 参数
$filename = isset($_GET['filename']) ? $_GET['filename'] : '';

$filePath = './' . $filename;

// 检查文件是否存在且可读
if (file_exists($filePath) && is_readable($filePath)) {
    $content = file_get_contents($filePath); // 读取文件内容
    echo nl2br(htmlspecialchars($content)); // 将内容转换为适合在 HTML 中显示的格式
} else {
    echo "无法读取文件";
}

下面是运行效果

随意读取一个文件进行测试

成功读取当前文件的文件内容,尝试读取其他文件

http://localhost:63342/wushiyiwuzhong.com/file_read.php?filename=../test.txt


成功读取

文件的写入

这里主要使用到的函数是$_SERVERfile_put_contents

知识补充
$_SERVER函数

$_SERVER 是一种超全局变量,在 PHP 中用于收集有关服务器和执行环境的信息。它包含了很多索引,每个索引都有关于服务器或者当前执行脚本的信息。这些信息是由 Web 服务器提供的,因此具体可用的信息取决于服务器软件本身。
以下是一些常用的 $_SERVER 数组索引及其含义:

  • $_SERVER[‘PHP_SELF’]:当前执行脚本的文件名。
  • $_SERVER[‘GATEWAY_INTERFACE’]:服务器使用的 CGI 规范的版本。
  • $_SERVER[‘SERVER_ADDR’]:当前运行脚本所在服务器的 IP 地址。
  • $_SERVER[‘SERVER_NAME’]:当前运行脚本所在服务器的主机名。
  • $_SERVER[‘SERVER_SOFTWARE’]:服务器标识字符串,在响应请求时的头信息中给出。
  • $_SERVER[‘SERVER_PROTOCOL’]:请求页面时通信协议的名称和版本。
  • $_SERVER[‘REQUEST_METHOD’]:访问页面使用的请求方法,例如 “GET”, “HEAD”, “POST”, “PUT”。
  • $_SERVER[‘REQUEST_TIME’]:请求开始时的时间戳。从 PHP 5.1.0 开始可用。
  • $_SERVER[‘QUERY_STRING’]:查询字符串,如果有的话,通过它进行页面访问。
  • $_SERVER[‘DOCUMENT_ROOT’]:当前运行脚本所在的文档根目录,在服务器配置文件中定义。
  • $_SERVER[‘HTTP_ACCEPT’]:当前请求的 Accept: 头信息内容。
  • $_SERVER[‘HTTP_ACCEPT_CHARSET’]:当前请求的 Accept-Charset: 头信息内容(如果存在)。
  • $_SERVER[‘HTTP_HOST’]:当前请求的 Host: 头信息内容。
  • $_SERVER[‘HTTP_REFERER’]:引导用户代理到当前页的前一页的地址(如果存在)。
  • $_SERVER[‘HTTPS’]:如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。
  • $_SERVER[‘REMOTE_ADDR’]:浏览当前页面的用户的 IP 地址。
  • $_SERVER[‘REMOTE_HOST’]:浏览当前页面的用户的主机名。
  • $_SERVER[‘REMOTE_PORT’]:用户机器上连接到 Web 服务器所使用的端口号。
  • $_SERVER[‘SCRIPT_FILENAME’]:当前执行脚本的绝对路径名称。
  • $_SERVER[‘SERVER_ADMIN’]:该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。
  • $_SERVER[‘SERVER_PORT’]:Web 服务器使用的端口。默认值为 “80”。
  • $_SERVER[‘SERVER_SIGNATURE’]:包含了服务器版本和虚拟主机名的字符串。
  • $_SERVER[‘PATH_TRANSLATED’]:当前脚本所在文件系统(不是文档根目录)的基本路径。
  • $_SERVER[‘SCRIPT_NAME’]:包含当前脚本的路径。这在页面需要指向自己时非常有用。
  • $_SERVER[‘REQUEST_URI’]:访问此页面所需的 URI。例如 “/index.html”。

注意:不是所有的服务器都会提供所有这些信息,有些服务器可能会省略一些信息或者提供额外的信息,并且某些值可能在命令行运行 PHP 时不可用。这取决于你的服务器配置和 PHP 的安装方式。

$_SERVER函数

file_put_contents() 是 PHP 中一个非常有用的函数,用于写入数据到文件。该函数是 fopen(),fwrite(),和 fclose() 函数的简单一次性替代。
这是基本语法:

file_put_contents($file, $data, $flags, $context);

参数解释:

  • $file:必需。规定要写入数据的文件。如果文件不存在,此函数将尝试创建该文件。如果文件路径或权限出现问题,或者磁盘空间不足,此函数将返回 false。
  • $data:必需。规定要写入文件的数据。可以是字符串,数组或数据流。
  • $flags:可选。规定如何处理文件。可能的值:
  • FILE_USE_INCLUDE_PATH:搜索 include_path(在 php.ini 中)。
  • FILE_APPEND:在文件末尾追加数据,而不是覆盖。
  • LOCK_EX:在写入时获取一个独占锁定。
  • $context:可选。可以修改流的行为。
    这个函数返回写入到文件中的字节数,如果失败则返回 false。注意,如果在 file_put_contents() 函数中使用了 FILE_APPEND 标记,返回的字节数可能包含了由于追加导致的初始文件大小。下面是一个使用的示例
<?php
$file = 'example.txt';
$data = 'Hello, World!';
file_put_contents($file, $data);  // 写入数据到文件

$file = 'example.txt';
$data = 'Hello, again!';
file_put_contents($file, $data, FILE_APPEND);  // 追加数据到文件

运行效果如下

使用file_put_contents函数时你需要确保有适当的文件权限来写入或修改文件,否则此函数会执行失败

下面我们来具体实现文件写入,这里模拟的是直接写入到一个php文件中,至于为什么不加一个用户自定义文件是因为想让大家更容易理解。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Head</title>
    <link rel="stylesheet" href="index.css">
</head>
<body>
<div class="header">
    <a href="index.html" class="logo">
        <h1>wushiyiwuzhong</h1>
    </a>
    <nav class="navbar">
        <ul>
            <li><a href="file_index.php">文件功能导航</a></li>
            <li><a href="file_upload.php">文件上传</a></li>
            <li><a href="file_downlaod.php">文件下载</a></li>
            <li><a href="#">文件删除</a></li>
            <li><a href="file_read.php">文件读取</a></li>
            <li><a href="file_write.php">文件写入</a></li>
        </ul>
    </nav>
</div>
<div>
    <div class="content">
            <form action="file_write.php" method="post" enctype="application/x-www-form-urlencoded">
                <textarea name="fileContent" rows="4" cols="50" placeholder="请输入文件内容"></textarea><br>
                <input type="submit" value="写入文件" name="submit">
            </form>
    </div>

</div>
</div>
</body>
</html>

<?php
// 检查是否有 POST 请求,并且 'fileContent' 字段是否已经设置
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['submit'])) {
    // 定义要写入的文件名,可以是相对路径或绝对路径
    $filePath = '1.php';//模拟写入文件可控的情况

    // 从表单获取内容
    $content = $_POST['fileContent'];

    // 尝试将内容写入文件
    if (file_put_contents($filePath, $content) !== false) {
        echo "文件写入成功!"."<br><hr>";
    } else {
        echo "文件写入失败,请检查文件路径及权限。";
    }
}

运行效果如下

我们这里直接模拟攻击者写入木马从而控制服务器


访问我们写入的后门文件

成功访问我们的后门文件,如果是真实情况的话我们已经成功获取到了目标服务器的权限

总结

文件的读取、写入还是比较简单的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新版软考高项试题分析精选(二)

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 1、除了测试程序之外&#xff0c;黑盒测试还适用于测试&#xff08; &#xff09;阶段的软件文档。 A.编码 B.总体设计 D.数据库设计 C.软件需求分析 答案&a…

基于vue 2.0的H5页面中使用高德地图定位,搜索周边商户,覆盖物标记

基于vue的H5页面中使用高德地图定位&#xff0c;搜索周边商户&#xff0c;覆盖物标记 首先安装高德地图插件 npm i amap/amap-jsapi-loader --save地图承载容器 <template><div id"container"></div> </template>地图容器样式 <style…

C语言精选练习题:(7)计算最大值和最小值的差

每日一言 欲把西湖比西子&#xff0c;淡妆浓抹总相宜。 --饮湖上初晴后雨二首其二 题目 输入10个整数&#xff0c;找出其中的最大和最小值&#xff0c;计算两者的差&#xff0c;并打印出来 解题思路 创建一个数组用循环将10个整数存到数组中用打擂台的方式求出最大和最小值打…

ModuleNotFoundError_ No module named ‘Crypto‘

当要使用 python 进行加密数据的时候报错了 from Crypto.Util.Padding import pad, unpad from Crypto.Cipher import AES报错 File "F:\huisu.py", line 1, in <module>from Crypto.Util.Padding import pad, unpad ModuleNotFoundError: No module named Cr…

2024河南光伏展|郑州光伏储能展2024|4月8-10日华中地区首展

2024第四届中国(郑州)太阳能光伏及储能产业展览会   时间&#xff1a;2024年4月8-10日   地点&#xff1a;郑州.中原国际博览中心 在全球清洁能源领域&#xff0c;一年一度的中国&#xff08;郑州&#xff09;太阳能光伏及储能产业展览会已成为业界的标杆盛会。2024年的第…

C++ 二叉树进阶

二叉搜索树 二叉搜索树概念 二叉搜索树又称二叉排序树/二叉查找树&#xff0c;它可以是空树/具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值它的…

代驾预约小程序系统源码 :提起预约,避免排队 带完整搭建教程

大家好啊&#xff0c;又到罗峰来给大家分享好用的源码系统的时间了。今天要给大家分享的第一款代驾预约小程序源码系统。传统的代驾服务中&#xff0c;用户往往需要在酒后代驾、长途驾驶等场景下&#xff0c;面对排队等待代驾司机空闲时间的繁琐过程。这不仅浪费了用户的时间和…

数字化产品经理的金字塔能力模型

在企业数字化转型的浪潮下&#xff0c;要求IT团队更加主动的服务业务、赋能业务&#xff0c;而数字化产品经理正是IT、业务融合的桥梁&#xff0c;该岗位需要具备业务、技术、商业的复合知识结构&#xff0c;并且拥有很强的自驱力。那么数字化产品经理在企业如何产生价值、赋能…

ThreadLocal原理及使用场景

ThreadLocal意为线程本地变量&#xff0c;用于解决多线程并发时访问共享变量的问题 明显&#xff0c;在多线程的场景下&#xff0c;当有多个线程对共享变量进行修改的时候&#xff0c;就会出现线程安全问题&#xff0c;即数据不一致问题。常用的解决方法是对访问共享变量的代码…

【C++】——继承和派生

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

皮具加工厂ERP有哪些牌子?企业使用皮具加工厂ERP有什么好处

日常生活当中有很多类型和款式的箱包皮具&#xff0c;这些商品有差异化的用料、配方、品质、颜色、款式等&#xff0c;琳琅满目的皮具也给我们的生活带来诸多的便利。 皮具加工厂发展阶段的不同&#xff0c;遇到的管理难点各异&#xff0c;其中&#xff0c;生产现场数据采集、…

DISSECT

XAE 学习架构 OGB means ‘Orthogonal Gate Block’&#xff0c;shared (A ∗ ^∗ ∗, B ∗ ^∗ ∗) and unshared (A ⊥ ^⊥ ⊥, B ⊥ ^⊥ ⊥) information&#xff0c;Φ是编码器&#xff0c;Ψ是解码器 辅助信息 作者未提供代码

【技术干货】开源库 Com.Gitusme.Net.Extensiones.Core 的使用(二)

Com.Gitusme.Net.Extensiones.Core 扩展库 1.0.6 版本已发布。 1、版本变更说明 新增Sokcet套接字扩展。简化Socket操作&#xff0c;支持自定义命令封装&#xff0c;使用方便快捷&#xff0c;让您聚焦业务实现&#xff0c;而不必关心底层逻辑&#xff0c;提高开发效率。日志功…

桶装水订水小程序app,线上预约订水更便捷

桶装水订水小程序app&#xff0c;线上预约订水更便捷。设置好地址&#xff0c;一键订水&#xff0c;工作人员送水到家。还能配送新鲜果蔬&#xff0c;绿色健康有保证。送水软件手机版&#xff0c;提供各种品牌桶装水&#xff0c;在线发起订水服务&#xff0c;由服务人员送水到家…

二、网站高性能架构设计——web前端与池化

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、高性能浏览器访问 1.减少HTTP请求 HTTP协议是无状态的应用层协议&#xff0c;也就是说每次HTTP请求都需要建立通信链路、进行数据传输&#xf…

phpstudy 开启目录浏览功能

&#xff08;1&#xff09;在该目录下&#xff1a; &#xff08;2&#xff09;选择对应网站的配置文件&#xff1b; &#xff08;3&#xff09;修改&#xff1a; # Options FollowSymLinks ExecCGI Options Indexes FollowSymLinks ExecCGI

干货|你必须要知道的机器视觉常识!

原创 | 文 BFT机器人 01 机器视觉是什么&#xff1f; 机器视觉是一种能够模拟人类视觉系统的技术&#xff0c;是计算机的“慧眼”&#xff0c;能够使计算机理解和解释图像或视频中的信息。 机器视觉包括图像处理、机械工程技术、控制、电光源照明、光学成像、传感器、模拟与数…

2024上海国际智能驾驶技术展览会(自动驾驶展)

2024上海国际智能驾驶技术展览会 2024 Shanghai International Autonomous driving Expo 时间&#xff1a;2024年3月26-28日 地点&#xff1a;上海跨国采购会展中心 随着科技的飞速发展&#xff0c;智能驾驶已经成为了汽车行业的重要趋势。在这个时代背景下&#xff0c;汽车不…

requestAnimationFrame是什么?介绍 如何使用?适用场景?有哪些缺点和优点,兼容性怎么样?

文章目录 前言是什么&#xff1f;如何使用适用场景优点和缺点兼容性后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技…

目标检测算法 - YOLOv2

文章目录 1. Batch Normalization2. High Resolution Classifier3. Anchor、Dimension Cluster、Direct location prediction4. Loss Function5. Fine-Grained Features6. Multi-Scale Training7. Faster8. Stronger Better&#xff0c;Faster&#xff0c;Stronger。 2017年&am…