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

026-安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全

Untitled

#知识点:

1、PHP新闻显示-数据库操作读取显示
2、PHP模版引用-自写模版&Smarty渲染
3、PHP模版安全-RCE代码执行&三方漏洞

演示案例:

➢新闻列表&模版引用-代码RCE安全

#新闻列表

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

简单实现新闻列表显示

  • 打开数据库创建新的新闻数据库(new)

    • 键值对(id title author content image)
    • 给数据库(new)写入新数据 image写保存好的图片路径即可

    Untitled

Untitled

  • 输入相关简单代码,能把数据库中的资料显示出来看

Untitled

<?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);
?>

#自写模版引用

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

模板规范化,显示更美观

  • 首先在项目中创建new.html前端模板代码

Untitled

  • 创建新的数据库news

Untitled

  • 改变以下源代码,将数据库中的元素一一,替换为使用html渲染,效果如下图

Untitled

**// 从文件中读取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);

安全问题:

  1. 如果在数据库中任何地方添加<?php phpinfo();?> ,在调用数据库内容的时候会自动显示

    Untitled

    Untitled

  2. 如果在html模板源码中加入<?php phpinfo();?> ,在执行HTML并不会显示,但通过php解析调用,则依然会展示有关内容

Untitled

<?php phpinfo(); ?> 这段代码用于显示关于服务器 PHP 配置的详细信息。虽然 phpinfo() 是一个对开发人员有用的函数,可以获取有关 PHP 环境的信息,但在生产环境中应谨慎使用。

潜在的风险和关切点:

  1. 安全风险: 显示详细的 PHP 信息可能透露有关服务器配置的敏感信息,包括 PHP 版本、扩展和路径。攻击者可以利用这些信息来识别潜在的漏洞。
  2. 信息泄露: 在生产环境中,显示详细的 PHP 信息是不推荐的,因为存在信息泄露的风险。攻击者可能利用这些信息更好地了解服务器的设置并识别潜在的攻击点。
  3. 服务器加固: 安全最佳实践涉及将服务器信息的暴露最小化,以减少攻击面。应该限制不必要的服务器环境信息,以降低攻击表面。

#Smarty模版引用

下载:https://github.com/smarty-php/smarty/releases

Smarty4模版引用-并不是绝对安全

使用:
1、创建一个文件夹,命名为smarty
2、下载Smarty对应版本并解压缩到该文件夹中。
3、创建一个PHP文件,命名为index.php,并在文件中添加以下代码:

<?php
// 引入 Smarty 类文件
require('smarty/libs/Smarty.class.php');// 创建 Smarty 实例
$smarty = new Smarty;// 设置 Smarty 相关属性
**$smarty->template_dir = 'smarty/templates/';  // 设置模板文件的目录**
$smarty->compile_dir = 'smarty/templates_c/';  // 设置编译文件的目录
$smarty->cache_dir = 'smarty/cache/';  // 设置缓存文件的目录
$smarty->config_dir = 'smarty/configs/';  // 设置配置文件的目录// 赋值变量到模板中
$smarty->assign('title', '欢迎使用 Smarty');  // 将变量 'title' 赋值为 '欢迎使用 Smarty'// 显示模板
$smarty->display('index.tpl');  // 使用 'index.tpl' 模板文件进行显示
?>

4、在smarty相关目录下创建smarty/templates/ 并在目录下创建一个名为index.tpl的模板文件,并将以下代码复制到上述点定义文件夹中

<!DOCTYPE html>
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{$title}</h1>
<p>这是一个使用 Smarty 的例子。</p>
</body>
</html>

Untitled

安全性:在相关模板内容下加入<?php phpinfo();?> ,但是发现不能泄露

Untitled

Smarty3模版引用-有对应漏洞

Smarty <= 3.1.32 Remote Code execution(CVE-2017-1000480) - magic_zero - 博客园 (cnblogs.com)

使用:
1、创建一个文件夹,命名为smarty3
2、下载Smarty对应版本并解压缩到该文件夹中。
3、创建一个PHP文件,命名为index1.php,并在文件中添加以下代码:

<?phpdefine('SMARTY_ROOT_DIR', str_replace('\\', '/', __DIR__));**define('SMARTY_COMPILE_DIR', SMARTY_ROOT_DIR . '/smarty3/tmp/templates_c');define('SMARTY_CACHE_DIR', SMARTY_ROOT_DIR . '/smarty3/tmp/cache');include_once(SMARTY_ROOT_DIR . '/smarty3/libs/Smarty.class.php');**class testSmarty extends Smarty_Resource_Custom
{protected function fetch($name, &$source, &$mtime){$template = "CVE-2017-1000480 smarty PHP code injection";$source = $template;$mtime = time();}
}$smarty = new Smarty();
$smarty->setCacheDir(SMARTY_CACHE_DIR);
$smarty->setCompileDir(SMARTY_COMPILE_DIR);
$smarty->registerResource('test', new testSmarty);
**$smarty->display('test:' . $_GET['eval']);**

4、将访问路由修改为http://localhost:63342/dome01/index1.php?**eval=*/phpinfo();//,即可访问泄露**

Untitled

Untitled

Untitled

#代码RCE安全测试

1、自写模版的安全隐患
2、第三方Smarty的安全隐患国家信息安全漏洞共享平台 (cnvd.org.cn)

Untitled

Untitled

Untitled

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

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

相关文章

洗眼镜用超声波清洗机是不是智商税?值得入手超声波清洗机推荐

为了不洗眼镜大家都可以懒到什么程度&#xff1f;从一开始佩戴眼镜开始&#xff0c;就非常懒得洗眼镜&#xff0c;就算是眼镜脏了就随便用衣角或者是纸巾擦擦就完事了~基本都是很少用水去清洗。由于我一副眼镜使用的时长不是很久&#xff0c;老板也问我为什么频繁换眼镜&#x…

程序员自由创业周记#26:实习生

程序员自由创业周记#26&#xff1a;实习生 不发工资的实习生 一个人的力量是有限的&#xff0c;尤其是创业。因为要兼顾很多&#xff0c;需要的做的事也很多&#xff0c;而且时间有限&#xff0c;所以有一个帮手至关重要。不过鉴于创业的启动资金有限&#xff0c;雇人在现阶段…

Echars3D 饼图开发

关于vue echart3D 饼图开发 首先要先下载 "echarts-gl", 放在main.js npm install echarts-gl --save <template><div class"cointan"><!-- 3d环形图 --><div class"chart" id"cityGreenLand-charts"><…

【2024美国大学生数学建模竞赛】2024美赛C题网球运动中的势头,网球教练4.0没人比我更懂这个题了!!!

【2023美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文 引言 本人是计算机博士&#xff0c;拥有10年网球球龄&#xff0c;2023年的温网决赛&#xff0c;熬夜到半夜全称观看完了直播&#xff0c;对于网球规则、比赛的数据非常熟悉&#xff0c;这个…

【数据结构】 归并排序详解

1.基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。 将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序…

Linux内核源码

记得看目录哦&#xff01; 1. 为什么要阅读Linux内核2. Linux0.01内核源码3. 阅读linux内核源码技巧4. linux升级内核5. linux的备份和恢复5.1 安装dump和restore5.2 使用dump完成备份5.3 使用restore完成恢复 1. 为什么要阅读Linux内核 2. Linux0.01内核源码 3. 阅读linux内核…

MTTR、MTBF、MTTF的大白话理解

目录 前言1. 基本知识2. 扩展 前言 理解这方面的知识对系统架构会有宏观的认识&#xff0c;也方便日后的开发 对于这方面的知识也推荐阅读&#xff1a;MTTR、MTBF、MTTF、可用性、可靠性傻傻分不清楚&#xff1f; 1. 基本知识 系统可靠性和可用性相关的指标: MTTR&#xf…

STM32存储左右互搏 QSPI总线读写FLASH W25QXX

STM32存储左右互搏 QSPI总线读写FLASH W25QXX FLASH是常用的一种非易失存储单元&#xff0c;W25QXX系列Flash有不同容量的型号&#xff0c;如W25Q64的容量为64Mbit&#xff0c;也就是8MByte。这里介绍STM32CUBEIDE开发平台HAL库Qual SPI总线操作W25Q各型号FLASH的例程。 W25Q…

python给word插入脚注

1.需求 最近因为工作需要&#xff0c;需要给大量文本的脚注插入内容&#xff0c;我就写了个小程序。 2.实现 下面程序是我已经给所有脚注插入了两次文本“幸福”&#xff0c;给脚注2到4再插入文本“幸福” from win32com import clientdef add_text_to_specific_footnotes(…

外包干了8个月,技术退步明显...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

前端小案例——导航回顶部(HTML+CSS+JS, 附源码)

一、前言 实现功能&#xff1a; 这个案例实现了页面滚动到一定位置时显示"回到顶部"按钮&#xff0c;并且点击按钮能够平滑滚动回页面顶部的功能。 实现逻辑&#xff1a; 页面结构&#xff1a;通过HTML标签定义了页面的基本结构。页面主要由多个div.content组成&am…

【居然比GPT还好用】KnowLM:知识图谱 + 大模型,实现更有效的信息抽取和知识管理

KnowLM 知识图谱 大模型&#xff1a;实现信息抽取 KnowLM 原理KnowLM 部署KnowLM 应用1. 命名实体识别&#xff08;NER&#xff09;2. 关系抽取&#xff08;RE&#xff09;3. 事件抽取&#xff08;EE&#xff09; KnowLM 原理 代码&#xff1a;https://github.com/zjunlp/Kno…

如何使用内网穿透工具在公网实现实时监测DashDot服务器仪表盘

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用3. 本地访问DashDot服务4. 安装cpolar内网穿透5. 固定DashDot公网地址 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘&#xff0c;并且结合cpolar内网穿透工具可以实现公网实时监测服务…

2024年美国大学生数学建模F题思路分析 - 减少非法野生动物贸易

# 1 赛题 问题F&#xff1a;减少非法野生动物贸易 非法的野生动物贸易会对我们的环境产生负面影响&#xff0c;并威胁到全球的生物多样性。据估计&#xff0c;它每年涉及高达265亿美元&#xff0c;被认为是全球第四大非法交易。[1]你将开发一个由数据驱动的5年项目&#xff0c…

CCSIP中国网络安全行业全景册(第六版)发布 飞驰云联入选7大领域

2024年1月24日&#xff0c; FreeBuf咨询正式发布《CCSIP 2023中国网络安全行业全景册&#xff08;第六版&#xff09;》。Ftrans飞驰云联的产品凭借优秀的市场表现&#xff0c;强势入选网络隔离/网闸、工业网络隔离系统/网闸、数据安全管控&#xff08;平台型&#xff09;、数据…

[Tcpdump] 网络抓包工具使用教程

往期回顾 海思 tcpdump 移植开发详解海思 tcpdump 移植开发详解 前言 上一节&#xff0c;我们已经讲解了在海思平台如何基于静态库生成 tcpdump 工具&#xff0c;本节将作为上一节的拓展内容。 一、tcpdump 简介 「 tcpdump 」是一款强大的网络抓包工具&#xff0c;它基于…

deque容器的相关概念及常用接口

deque的基本概念 作用&#xff1a;作为双端数组&#xff0c;可以很方便的对头尾进行插入和删除操作 注意&#xff1a;适用deque时需包含头文件deque deque与vector的区别 1、vector对数组头部的插入和删除操作效率低&#xff0c;时间复杂度高。数据量越大&#xff0c;效率越…

Python学习03 -- 函数相关内容

1.def --- 这个是定义函数的关键字 \n --- 这个在print()函数中是换行符号 1.注意是x, 加个空格之后再y 1.形式参数数量是不受限制的&#xff08;参数间用&#xff0c;隔开&#xff09;&#xff0c;传实参给形参的时候要一一对应 返回值 --- 函数返还的结果捏 1.写None的时…

2023年09月CCF-GESP编程能力等级认证Python编程五级真题解析

Python等级认证GESP(1~6级)全部真题・点这里 一、单选题(共15题,共30分) 第1题 近年来,线上授课变得普遍,很多有助于改善教学效果的设备也逐渐流行,其中包括比较常用的手写板,那么它属于哪类设备?( ) A:输入 B:输出 C:控制 D:记录 答案:A 第2题 以下关于…

学习Android的第一天

目录 什么是 Android&#xff1f; Android 官网 Android 应用程序 Android 开发环境搭建 Android 平台架构 Android 应用程序组件 附件组件 Android 第一个程序 HelloWorld 什么是 Android&#xff1f; Android&#xff08;发音为[ˈnˌdrɔɪd]&#xff0c;非官方中文…