第26天:安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全

news2025/1/12 3:47:13

第二十六天

Untitled

一、PHP新闻显示-数据库操作读取显示

1.新闻列表

  1. 数据库创建新闻存储
  2. 代码连接数据库读取
  3. 页面进行自定义显示

二、PHP模版引用-自写模版&Smarty渲染

1.自写模版引用

  1. 页面显示样式编排
  2. 显示数据插入页面
  3. 引用模版调用触发

2.Smarty模版引用

1.下载:https://github.com/smarty-php/smarty/releases
2.使用:
  1. 创建一个文件夹,命名为smarty-demo。
  2. 下载Smarty对应版本并解压缩到该文件夹中。
  3. 创建一个PHP文件,命名为index.php,并在文件中添加以下代码:
3…源码写法:
<?php
// 引入 Smarty 类文件
require('smarty-demo/libs/Smarty.class.php');
// 创建 Smarty 实例
$smarty = new Smarty;
// 设置 Smarty 相关属性
$smarty->template_dir = 'smarty-demo/templates/';
$smarty->compile_dir = 'smarty-demo/templates_c/';
$smarty->cache_dir = 'smarty-demo/cache/';
$smarty->config_dir = 'smarty-demo/configs/';
// 赋值变量到模板中
$smarty->assign('title', '欢迎使用 Smarty');
// 显示模板
$smarty->display('index.tpl');
?>
4、创建一个名为index.tpl的模板文件,并将以下代码复制到上述点定义文件夹中
<!DOCTYPE html>
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{$title}</h1>
<p>这是一个使用 Smarty 的例子。</p>
</body>
</html>

三、PHP模版安全-RCE代码执行&三方漏洞

1.代码RCE安全测试

1.自写模版的安全隐患
  1. 如果在数据库中任何地方添加<?php phpinfo();?> ,在调用数据库内容的时候会自动显示
  2. 如果在html模板源码中加入<?php phpinfo();?> ,在执行HTML并不会显示,但通过php解析调用,则依然会展示有关内容
2.第三方Smarty的安全隐患
  1. 安全风险: 显示详细的 PHP 信息可能透露有关服务器配置的敏感信息,包括 PHP 版本、扩展和路径。攻击者可以利用这些信息来识别潜在的漏洞
  2. 信息泄露: 在生产环境中,显示详细的 PHP 信息是不推荐的,因为存在信息泄露的风险。攻击者可能利用这些信息更好地了解服务器的设置并识别潜在的攻击点
  3. 服务器加固: 安全最佳实践涉及将服务器信息的暴露最小化,以减少攻击面。应该限制不必要的服务器环境信息,以降低攻击表面

四、环境复现

1.新闻列表

<?php
// 包含数据库配置文件
include 'config.php';

// 从GET请求中获取id参数,如果不存在则默认为1
$id = $_GET['id'] ?? '1';

// 构建SQL查询语句
$sql = "select * from new where id=$id";

// 执行查询并获取结果集
$data = mysqli_query($con, $sql);

// 使用mysqli_fetch_row遍历结果集的每一行
while ($row = mysqli_fetch_row($data)) {
    // 输出标题,注意:mysqli_fetch_row返回的是枚举数组,索引从0开始
    echo "标题: <title>" . $row[1] . "</title><br>";

    // 输出第二列数据
    echo $row[2] . "<br>";

    // 输出第三列数据
    echo $row[3] . "<br>";

    // 输出图片,注意:在HTML中使用$row[4]作为图片路径
    echo "<img src='$row[4]' width='300' height='300'></img><br>";
}

// 关闭数据库连接
mysqli_close($con);
?>

2.自编程模板引用

// 从文件中读取HTML模板内容
$template = file_get_contents('new.html');

// 使用mysqli_fetch_row遍历结果集的每一行
while ($row = mysqli_fetch_row($data)) {
    // 从结果集中获取每一列的值,并存储到相应的变量中
    $page_title = $row[1];
    $heading = $row[2];
    $subheading = $row[3];
    $content = $row[4];
    $item = $row[5];
}

// 替换HTML模板中的占位符
$template = str_replace('{page_title}', $page_title, $template);
$template = str_replace('{heading}', $subheading, $template);
$template = str_replace('{subheading}', $subheading, $template);
$template = str_replace('{content}', $content, $template);
$template = str_replace('{$item}', $item, $template);

// 将PHP代码嵌入HTML模板中并执行
eval('?>' . $template);

// 关闭数据库连接
mysqli_close($con);

3.Smarty模版引用

<?php
// 引入 Smarty 类文件
require('smarty/libs/Smarty.class.php');

// 创建 Smarty 实例
$smarty = new Smarty;

// 设置 Smarty 相关属性
$smarty->template_dir = 'smarty/templates/';  // 设置模板文件的目录
// 指定 Smarty 模板文件所在的目录,这里使用了相对路径,可以根据实际情况修改
$smarty->compile_dir = 'smarty/templates_c/';  // 设置编译文件的目录
// 指定 Smarty 编译生成的模板文件所存放的目录,用于存放 Smarty 编译生成的 PHP 文件
$smarty->cache_dir = 'smarty/cache/';  // 设置缓存文件的目录
// 指定 Smarty 缓存文件的存放目录,用于存放 Smarty 缓存文件
$smarty->config_dir = 'smarty/configs/';  // 设置配置文件的目录
// 指定 Smarty 配置文件的存放目录,用于存放 Smarty 配置文件

// 赋值变量到模板中
$smarty->assign('title', '欢迎使用 Smarty');  // 将变量 'title' 赋值为 '欢迎使用 Smarty'

// 显示模板
$smarty->display('index.tpl');  // 使用 'index.tpl' 模板文件进行显示
?>

4.Smarty3模版引用——有漏洞

<?php

// 定义 Smarty 根目录路径常量
define('SMARTY_ROOT_DIR', str_replace('\\', '/', __DIR__));

// 定义 Smarty 编译文件目录路径常量
define('SMARTY_COMPILE_DIR', SMARTY_ROOT_DIR . '/smarty3/tmp/templates_c');

// 定义 Smarty 缓存文件目录路径常量
define('SMARTY_CACHE_DIR', SMARTY_ROOT_DIR . '/smarty3/tmp/cache');

// 包含 Smarty 类文件
include_once(SMARTY_ROOT_DIR . '/smarty3/libs/Smarty.class.php');

// 自定义 Smarty 资源类,继承自 Smarty_Resource_Custom
class testSmarty extends Smarty_Resource_Custom
{
    // 重写 fetch 方法
    protected function fetch($name, &$source, &$mtime)
    {
        // 自定义模板内容,这里只是示例,实际情况应该从数据库或其他来源获取模板内容
        $template = "CVE-2017-1000480 smarty PHP code injection";
        // 将模板内容赋值给 $source 参数
        $source = $template;
        // 设置模板修改时间为当前时间
        $mtime = time();
    }
}

// 创建 Smarty 实例
$smarty = new Smarty();

// 设置 Smarty 缓存文件目录
$smarty->setCacheDir(SMARTY_CACHE_DIR);

// 设置 Smarty 编译文件目录
$smarty->setCompileDir(SMARTY_COMPILE_DIR);

// 注册自定义资源类型 'test',并指定使用 testSmarty 类处理该资源类型
$smarty->registerResource('test', new testSmarty);

// 获取要显示的模板名称,并通过 $_GET['eval'] 获取,存在安全风险,应谨慎使用
$templateName = 'test:' . $_GET['eval'];

// 显示模板
$smarty->display($templateName);

?>

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

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

相关文章

【Linux高性能服务器编程】两种高性能并发模式剖析——半同步/半异步模式

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之两种高性能并发模式介绍&#xff0c;在这篇文章中&#xff0c;你将会学习到高效的创建自己的高性能服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解…

PHP-001、PHP学习之PhpStorm+PhpStudy环境安装

一、说明 由于当前需要&#xff0c;暂时停止学习python&#xff0c;当然有时间继续&#xff0c;转为php&#xff0c;听说php开发网站、小程序等运行效率更高&#xff0c;朋友那边再做这个&#xff0c;准备学习一下&#xff0c;和朋友们一起来吧&#xff0c;就这开发环境安装&a…

李沐60_机器翻译数据集——自学笔记

!pip install d2limport os import torch from d2l import torch as d2l下载和预处理数据集 在这个将英语翻译成法语的机器翻译问题中&#xff0c; 英语是源语言&#xff08;source language&#xff09;&#xff0c; 法语是目标语言&#xff08;target language&#xff09;。…

求职招聘小程序源码系统 全开源源代码:找工作+招人才功能强大 带完整的安装代码包以及搭建教程

互联网的深入发展&#xff0c;求职招聘已经不再是传统的线下模式所能满足的。越来越多的企业和求职者开始倾向于线上招聘&#xff0c;寻找更加便捷、高效的求职招聘方式。因此&#xff0c;我们结合市场需求和技术发展趋势&#xff0c;推出了这款求职招聘小程序源码系统。 该系…

VNISEdit 制作安装包

1. 环境依赖 1.1. NSIS 下载 下载地址&#xff1a;https://nsis.sourceforge.io/Download 1.2. VNISEdit 下载 下载地址1&#xff1a;https://sourceforge.net/projects/hmne/ 下载 exe 安装。 下载地址2&#xff1a;https://hmne.sourceforge.net/ 可以下载 exe 安装。也…

OurBMC大咖说|第4期:基于飞腾腾珑E2000的国产化BMC固件开发简介

栏目介绍&#xff1a;"OurBMC大咖说" 是由 OurBMC 社区精心策划的线上讲座栏目&#xff0c;邀请 BMC 相关领域大咖共同探讨 BMC 全栈技术的发展趋势、挑战和机遇。无论你是初学者还是资深从业者&#xff0c;"OurBMC大咖说" 都将为你提供一个宝贵的学习和交…

如何确定IP地址的地理位置

IP地址的地理位置确定是一个复杂而精细的过程&#xff0c;它结合了多种技术与方法来推断或确定设备在网络中的大致物理位置。以下是对IP地址地理位置确定过程的详细解释&#xff1a; 首先&#xff0c;我们要理解IP地址本身并不能直接反映物理位置信息。IP地址主要是用于在网络中…

路由引入,过滤实验

实验拓补图 实验目的&#xff1a; 1、按照图示配置 IP 地址&#xff0c;R1&#xff0c;R3&#xff0c;R4 loopback口模拟业务网段 2、R1 和 R2 运行 RIPv2,R2&#xff0c;R3和R4运行 OSPF&#xff0c;各自协议内部互通 3、在 RIP 和 oSPF 间配置双向路由引入,要求除 R4 上的…

计算机java项目|springboot档案管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

工业级扫描式避障型激光雷达选型指南

工业级扫描式激光避障型传感器选型指南 在工业自动化领域&#xff0c;扫描式激光避障型传感器已成为不可或缺的关键组件。其高精度、高可靠性以及快速响应能力&#xff0c;使得机器人在复杂环境中能够安全、高效地执行任务。然而&#xff0c;面对市场上众多的传感器产品&#…

【S32DS RTD实战】-1.5-S32DS使用Post-Build调用第三方插件-自动对生成的s19,Hex,Bin文件二次编辑

<--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景&#xff1a; 在《【S32DS RTD实战】-1.3-S32K3工程生成S19&#xff0c;BIN&#xff0c;Hex文件&#xff0c;以及Post-build steps的妙用_s32ds如何生成s19或hex文件-CSDN博客https://blog.csdn.net/qfmzhu/articl…

RTU遥测终端为城市排水安全保驾护航!

近年来&#xff0c;全球气候变迁与城市化进程不断加速&#xff0c;导致强降雨事件频发&#xff0c;道路低洼地带、下穿式立交桥和隧道等区域在暴雨中常易积水&#xff0c;严重阻碍了人民的出行&#xff0c;甚至危及生命与财产安全。而传统的排水管网管理方式已难以适应现代城市…

【大模型系列】预训练

数据 数据预处理 预处理流程&#xff1a; 原始语料库—>质量过滤&#xff08;语种过滤、统计过滤、关键词过滤、分类器过滤&#xff09;—>敏感内容过滤&#xff08;有毒内容、隐私内容PII&#xff09;—>数据去重&#xff08;句子级别、文档级别、数据集级别&#…

【python】Python学生信息管理系统(源码+报告+本地存储)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

stack、queue(priority_queue)的模拟实现和deque的简单介绍

stack和queue(priority_queue) 1. 容器适配器 适配器(Adapter)&#xff1a;一种用来修饰容器(Containers)或仿函数(Functors)或迭代器(Iterator)接口的东西。 适配器是一种设计模式&#xff0c;该模式将一个类的接口转换成客户希望的另外一个接口。 现实中拿插座来说&#xf…

Linux:Win10平台上,用VMware安装Centos7.x及系统初始化关键的相关配置(分步骤操作,详细,一篇足以)

VMware安装Centos7.x镜像的详细步骤&#xff1a;VMWare安装Centos系统&#xff08;无桌面模式&#xff09; 我这里是为了安装Hadoop集群&#xff0c;所以&#xff0c;以下这些步骤是必须进行的 如果你是学习Linux&#xff0c;可以跳过非必须的那些配置项 我安装的版本是&…

水牛社靠谱吗,水牛社可以当做副业来做吗?

水牛社这个平台是否靠谱&#xff0c;能否作为副业的选择&#xff0c;一直是网友们热议的话题。实际上&#xff0c;水牛社是一个集合了众多网上赚钱活动任务和提供资源项目教程的综合性平台&#xff0c;它并非只局限于某一特定的项目&#xff0c;而是展现出多样化的特点。随着网…

总结Java中的synchronized

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 目录 总结*synchronized**初识synchronized*使用synchronizedsynchronized的特性(1)可重入性(2)自适应过程(3)锁消除(4)非公平锁(5)互斥锁 总结synchronized 初识synchronized 通过一个线程不安…

光明与速度:AI网络中GPU与光模块的协奏曲

&#x1f3b6;在人工智能&#xff08;AI&#xff09;的世界里&#xff0c;GPU和光模块是实现高速计算和数据传输的关键。它们如同一场精心编排的交响乐&#xff0c;每个部分都不可或缺&#xff0c;共同创造出美妙的和谐。&#x1f3bc; GPU&#xff1a;AI网络的心脏&#x1f4…

Python-GEE遥感云大数据分析、管理与可视化

原文链接&#xff1a;Python-GEE遥感云大数据分析、管理与可视化https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601238&idx2&sn6b0557cf61451eaff65f025d648da869&chksmfa820db1cdf584a76de953b96519704177e6206d4ecd47a2f2fabbcac2f7ea619b0bce184…