Mac中Twig模版安装与SSTI漏洞学习

news2024/9/20 6:21:01

感谢大佬的文章参考学习。

SSTI:https://www.cnblogs.com/bmjoker/p/13508538.html

Homebrew:快速开始 - Homebrew 中文网

Homebrew安装

一键快捷安装:默认使用中科大的源
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

如果命令执行中卡在下面信息:

==> Tapping homebrew/core
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core'...

Control + C中断脚本执行如下命令:

cd "$(brew --repo)/Library/Taps/"
mkdir homebrew && cd homebrew
git clone https://mirrors.ustc.edu.cn/homebrew-core.git

成功执行之后重新执行安装命令。

Homebrew 4.0 版本后默认JSON API获取仓库信息,因此在大部分情况下都不再需要处理下面的cask

安装cask 同样也有安装失败或者卡住的问题,解决方法也是一样:

cd "$(brew --repo)/Library/Taps/"
cd homebrew
git clone https://mirrors.ustc.edu.cn/homebrew-cask.git

成功执行之后重新执行安装命令。

/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

brew --version 验证是否成功安装

brew update 更新 # 这一步一定要做,不然安装可能会很慢

如果遇到 command not found brew,请执行下面脚本完成安装或者直接重新打开终端:

eval "$(/opt/homebrew/bin/brew shellenv)"

Homebrew安装转载来自快速开始 - Homebrew 中文网

 

安装Twig模版

(1)添加php仓库

brew tap shivammathur/php

(2)安装php

brew install php

(3)检验php是否成功安装

php -v

(4)安装composer

composer 是php的依赖管理工具,Twig需要composer来安装

brew install composer

检验composer是否成功安装 

composer --version

 

(5)切换phpstrom的php环境为8.3

上面有写我们的路径按照自己执行出来的路径在phpstrom页面输入command+,进入设置

切换自己的解释器即可

(6)初始化 composer项目

composer init

按照提示一步一步进行初始化

几个难懂的初始化选项:

# 一开始会让选择工作项目目录这里自己创建一个把绝对路径写上去即可

Minimum Stability []: 定义在安装依赖时所接受的最小稳定性级别,建议选择stable

Package Type (e.g. library, project, metapackage, composer-plugin) []: 选project即可

Lisense:CC BY 4.0

Would you like to define your dependencies (require) interactively [yes]?yes

Search for a package: twig

Enter package # to add, or the complete package name if it is not listed: twig/twig:1.42.5

Enter the version constraint to require (or leave blank to use the latest version): 回车即可

再次出现Search for a package: 直接回车即可

composer install直接一路按照提示不用再额外装东西了全部拒绝即可

Add PSR-4 autoload mapping? Maps namespace "Da\Twig" to the entered relative path. [src/, n to skip]: n

安装完成之后

composer dump-autoload 重新加载配置文件

我们选用1.42.5版本的twig即可

以后我们创建工作目录可以直接

# 进入项目目录
cd /Users/dw/PhpstormProjects/Twig

# 删除现有的 Twig
composer remove twig/twig

# 安装指定版本的 Twig
composer require twig/twig:1.42.5

类似于这样就可以

测试Twig模版

我们创建一个测试模版的文件,注意由于1.42.5已经有很多函数都已经弃用了,我们需要屏蔽弃用警告就可以了。

<?php
error_reporting(E_ALL & ~E_DEPRECATED);
require_once dirname(__FILE__) . '/vendor/twig/twig/lib/Twig/Autoloader.php';
Twig_Autoloader::register(true);

$twig = new Twig_Environment(new Twig_Loader_String());
$output = $twig->render("Hello {{name}}", array("name" => isset($_GET["name"]) ? $_GET["name"] : 'World'));  // 将用户输入作为模版变量的值

echo $output;
?>

 

可以看到这样的模版是没有注入的 模版引擎一般都默认对渲染的变量值进行编码和转义,所以并不会造成跨站脚本攻击(xss)

<?php
error_reporting(E_ALL & ~E_DEPRECATED);
require_once dirname(__FILE__) . '/vendor/twig/twig/lib/Twig/Autoloader.php';
Twig_Autoloader::register(true);
$twig = new Twig_Environment(new Twig_Loader_String());
$output=$twig->render("Hello {$_GET['name']}");// 将用户输入作为模版内容的一部分
echo $output;?>

但是如果我们直接将用户传入的数值作为模版的数值就会产生XSS漏洞造成SSTI攻击

 

由此可知如果在我们开发的时候出现没有将某个传参作为变量输入而是直接传入模版时很有可能产生SSTI漏洞。

试一下XSS呢? 

可以看到成功弹出。

如果服务端将用户的输入作为了模板的一部分,那么在页面渲染时也必定会将用户输入的内容进行模版编译和解析最后输出。

由此可见SSTI产生的原因可能就是因为服务端将用户输入作为了模版的一部分,导致用户输入和模版一起编译解析输出了。

在大多数模版中都符合

1. {{ }}

	•	用途:用于输出变量的值。
	•	示例:{{ user.name }} 会渲染出 user 对象的 name 属性值。

2. {% %}

	•	用途:用于执行逻辑操作,如循环、条件判断、宏等。
	•	示例:{% if user.is_admin %} Admin {% endif %} 用于根据 user 对象的 is_admin 属性来判断是否输出 “Admin”。


3. {# #}

	•	用途:用于注释,注释内容不会被渲染到输出中。
	•	示例:{# This is a comment #} 在模板渲染时不会显示。

4. {{% %}} 和 {%{{ }}}

	•	用途:某些模板引擎可能会使用变体来混合变量输出和逻辑控制,不过这些用法较少见,并且可能取决于特定的模板引擎和其实现。
	•	示例:这通常不是标准语法,但在某些自定义模板引擎中,可能会看到这些变体。
5. 其他常见标记

	•	Jinja2(Python):
	•	{{ variable }}:输出变量。
	•	{% for item in items %} ... {% endfor %}:循环。
	•	{% if condition %} ... {% endif %}:条件判断。
	•	Mustache:
	•	{{ variable }}:输出变量。
	•	{{#section}} ... {{/section}}:循环或条件。
	•	Handlebars:
	•	{{ variable }}:输出变量。
	•	{{#if condition}} ... {{/if}}:条件判断。
	•	{{#each items}} ... {{/each}}:循环。

于此Twig模版搭建完成并顺便简单说明了Twig模版中SSTI漏洞产生的原因:服务端将用户的输入作为了模板的一部分,并且在解析模版时将用户输入一并解析。

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

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

相关文章

LDAP HA 配置

目录 1 LDAP 高可用1.1 介绍1.2 安装1、环境2、全量数据同步3、配置LDAP的HA4、测试 总结 1 LDAP 高可用 1.1 介绍 LDAP的主从同步模式有5种&#xff1a; MirrorMode为ldap ha比较主流的一种模式&#xff0c;本文基于MirrorMode模式进行部署。 如果想要主从LDAP是同一个IP…

QT QPrinter无弹窗后台打印

最近遇到一个打印相关的问题,就是如何通过代码设定打印的相关信息,然后一键打印出来呢,不通过系统的打印设置界面(下图所示)进行设置内容,直接实现打印? 网上找到的一般的打印都如下所示,都是通过了QPrintDialog进行弹出系统打印设置,然后再进行打印,才完成打印,类…

所有即将登陆iPhone 16的Apple智能功能以及预期发布时间

苹果即将在9月9日的“Glowtime”&#xff08;闪耀时刻&#xff09;发布会上揭示和&#xff0c;这是本年度最值得期待的iPhone。 据悉&#xff0c;今年的iPhone将推出更大的屏幕、更快的芯片、更好的摄像头、新的颜色以及更多的内部升级。但是&#xff0c;除了这些硬件提升外&a…

如何进行匈牙利匹配

1 问题提出 在做目标检测的指标评价时,模型会输出一系列目标结果,而标注的GT又会有一些结果,如何将预测值和GT标注真值进行匹配呢?这个时候就可以使用匈牙利匹配来解决问题! For example: 2 匈牙利匹配使用流程 构建代价矩阵 可以根据PRED和GT中心点距离或者颜色特征的…

消防指挥中心控制台:守护安全的关键枢纽

在消防应急救援的战场上&#xff0c;嘉德立消防指挥中心控制台犹如一座坚实的堡垒&#xff0c;发挥着至关重要的作用。它是消防指挥的核心枢纽&#xff0c;连接着无数的信息与行动&#xff0c;为保护人民生命财产安全提供了强大的保障。 一、重要地位与作用 消防指挥中心控制台…

爆火AI教学视频Grant Sanderson作者是谁?

Grant Sanderson 是一位著名的数学教育家和 YouTube 频道 3Blue1Brown 的创始人。他于 2015 年毕业于斯坦福大学&#xff0c;获得数学学士学位。在斯坦福大学期间&#xff0c;他不仅专注于数学&#xff0c;还涉猎了计算机科学领域。 毕业后&#xff0c;Sanderson 加入了 Khan A…

小白看八字排盘需要的基础知识

我们在看生辰八字的时候比较专业的大师都会先根据命主的八字排盘起卦得出命盘卦象&#xff0c;然后再进行分析&#xff0c;今天我们来教大家认识八字命盘&#xff0c;小白看八字排盘需要学习哪些基础知识&#xff1f; 什么是八字排盘 八字排盘&#xff0c;顾名思义就是将一个…

图分类!!!

deepwalk 使用图中节点与节点的共现关系来学习节点的向量表示。那么关键的问题就是如何来描述节点与节点的共现关系&#xff0c;DeepWalk给出的方法是使用随机游走(RandomWalk)的方式在图中进行节点采样,RandomWalk是一种可重复访问已访问节点的深度优先遍历算法。给定当前访问…

Kafka--高吞吐量消息中间件

文章目录 Kafka特点和优势Kafka特点Kafka优势Kafka角色分区和副本的优势Kafka写入流程 Kafka部署单机集群部署1.环境准备ZooKeeper2.配置文件说明3.各节点部署Kafka4.启动服务5.确保服务启动 Kafka读写数据创建Topic获取Topic验证Topic详情生成Topic消费Topic删除 Topic Kafka特…

IP网络广播服务平台upload接口存在任意文件上传漏洞

免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 漏洞描述 …

解决常见 Android 问题的 9 大 Android 手机修复软件

许多人发现 Android 手机或平板电脑上的 Android 操作系统起初运行良好&#xff0c;但随着时间的推移&#xff0c;可能会出现各种 Android 系统问题。您可能会遇到一些问题&#xff0c;例如系统速度变慢、启动无响应、挂起错误、界面冻结、短信停滞、应用程序崩溃等。好吧&…

具体函数的卡诺图填入

目录 用卡诺图表示逻辑函数 基本步骤 例子1 例子2 例子3 用卡诺图表示逻辑函数 基本步骤 例子1 由真值表得卡诺图。 在函数值为1的地方在卡诺图上画上1。 例子2 例子3 非标准与或式&#xff0c;要找到公共部分。 将AB所在的那一行填上1。 将A非D的那个部分也填上1。 再…

平价蓝牙耳机哪个牌子好?四款宝藏机型独家推荐

在如今这个科技迅速发展的时代&#xff0c;蓝牙耳机已成为我们日常生活中不可或缺的一部分&#xff0c;尤其是对于那些寻求性价比的消费者来说&#xff0c;平价蓝牙耳机市场是一个充满选择的广阔天地&#xff0c;那么平价蓝牙耳机哪个牌子好&#xff1f;面对繁多的品牌和机型&a…

为什么有人说 PMP 是水证,它的含金量到底怎么样?

关于 PMP 证书是否值得考&#xff1f;有没有价值这个问题争议一直很大。 网传 pmp 培训机构的通过率高达 97%&#xff0c;很多人考了吐槽PMP没用&#xff0c;是“水证”&#xff0c;但是每年考 PMP 的人不减反增&#xff0c;大家可以想一下&#xff0c;这是为什么呢&#xff1…

如何选择?速卖通卖家必知的真人测评与自养号测评对比

速卖通平台上的真人测评和自养号测评各有其优缺点&#xff0c;选择哪种方式更好取决于卖家的具体需求和资源情况。 真人测评 优点&#xff1a; 1. 高权重和可信度&#xff1a;真实用户的账号权重较高&#xff0c;其评价在平台上具有更高的可信度和影响力&#xff0c;能够显著…

海纳百川林宇川:别怕,这个时候应该勇敢加贪婪

海纳百川作为一家资产管理公司&#xff0c;不仅致力于产生自身的利润&#xff0c;还通过其创始人林宇川的领导和战略布局&#xff0c;展现了其正规与专业性。林宇川凭借其丰富的华尔街投行高管经验&#xff0c;以及对国际资本市场的深入了解&#xff0c;为海纳百川的发展奠定了…

Microbiome | 基因组所张江/湖北大学张凤娟揭示菌群在植物抵御害虫中的作用

新型昆虫病原菌假单胞菌的富集增强了柳树对柳蓝叶甲的抗性 2024年9月9日&#xff0c;中国农业科学院农业基因组研究所张江、王海涛、湖北大学张凤娟等团队在Microbiome在线联合发表了题为 “Enrichment of novel entomopathogenic Pseudomonas species enhances willow resista…

HTML5中元素的拖放详解

第11章 HTML5中元素的拖放 只要为元素添加draggable属性&#xff0c;就可实现元素的拖放 11.1 拖放基础 11.1.1 使用JavaScript代码实现拖放 1.功能描述 H5页面中&#xff0c;添加两个div,divFrame包含divTitle&#xff0c;用鼠标移到divTitle上时&#xff0c;按下鼠标左键…

大模型LLM:合成训练样本的数据分布问题

近几天在研究大模型LLM数数问题时&#xff0c;使用合成数据集来训练LLM“统计字符串&#xff08;100个单词以内&#xff09;中字母的个数”的能力&#xff0c;基于Word进行分词。原始的合成代码在生成随机字符串时&#xff0c;采用如下代码&#xff1a; # self.words为常见英文…

盘古信息:做新能源行业数字化转型升级的领航员

随着全球能源转型的加速与可持续发展目标的明确&#xff0c;新能源行业正步入一个前所未有的广阔发展空间。然而&#xff0c;在迅猛发展的浪潮中&#xff0c;新能源行业也面临着诸多挑战&#xff0c;为应对当前市场环境&#xff0c;新能源行业正积极寻求数字化转型的突破路径&a…