第五周2

SSTI:
php漏洞:
Twig引擎
引擎介绍
Twig是一个流行的PHP模板引擎,其语法清晰简洁,易于学习和使用,Twig语法特征如下:

“插值:Twig中使用来表示插值,用于输出变量或表达式的值
控制结构:Twig支持常见的控制结构
过滤器:Twig允许使用过滤器对变量进行处理
简易示例
下面是一个Twig引擎的简易示例,我们首先引入Twig的自动加载文件,然后创建了一个模板环境(Environment),并通过该环境加载了名为index.html的模板文件并向该模板文件传递了一个名为name的变量”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
require_once 'vendor/autoload.php'; // 引入 Twig 的自动加载文件
use Twig\Environment;
use Twig\Loader\FilesystemLoader;

// 指定模板文件夹
$loader = new FilesystemLoader('path/to/templates');

// 创建 Twig 环境
$twig = new Environment $loader;

// 渲染模板
echo $twig->render('index.html', 'name' => 'John Doe']); // 将 name 变量传递给模板

?>

Smarty引擎
引擎介绍
Smarty是一个流行的PHP模板引擎,它提供了灵活且易于使用的语法,特点主要有以下几个:

“插值:Smarty中使用{xxx}来表示插值,用于输出变量的值,
控制结构:Smarty支持常见的控制结构
变量修饰器:Smarty允许使用变量修饰器对变量进行处理
注释:Smarty使用 { xxx } 来添加注释,这样可以在模板中添加注释信息而不会影响渲染结果
简易示例
下面是一个简易的Smarty引擎使用示例,我们首先引入了Smarty的文件,然后创建了一个Smarty对象,接着通过assign方法将name变量传递给模板,最后使用display方法渲染并显示名为index.tpl的模板”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
require('libs/Smarty.class.php'); // 引入Smarty的文件

$smarty = new Smarty(); // 创建Smarty对象

// 传递变量给模板
$smarty->assign('name', 'John Doe');

// 渲染模板
$smarty->display('index.tpl'); // 显示名为 index.tpl 的模板
?>
Blade引擎
基本介绍
Blade是Laravel框架中使用的一个流行的模板引擎,它提供了简洁而强大的语法,以下是关于Blade引擎的语法特点

"插值:Blade中使用双花括号{{ }}来表示插值,用于输出变量的值,例如:
Hello, {{ $name !"

“控制结构:Blade支持常见的控制结构,例如:if-else、for循环等,if-else结构用@if(condition) … @else … @endif表示,而for循环用@foreach($array as $item) … @endforeach表示
条件判断:Blade提供了方便的条件判断语法,例如:@unless(condition) … @endunless表示除非条件为假时执行
注释:使用来添加注释,这样可以在模板中添加注释信息而不会影响渲染结果
继承与包含:Blade支持模板的继承和包含,通过@extends(‘layout’)来指定父模板,然后使用@section和@yield或@include来定义和引入子模板的内容
简易示例”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- layout.blade.php -->
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@section('content')
<p>Default content</p>
@show
</body>
</html>
<!-- page.blade.php -->
@extends('layout')

@section('title', 'Page Title')

@section('content')
<p>Page content</p>
@endsection

在上述简易示例中我们创建了两个模板文件,首先layout.blade.php定义了一个基本布局,其中使用@yield来定义一个占位符,该占位符可以被子模板填充,在page.blade.php中通过@extends指定了父模板并使用@section和@endsection定义了一个名为’content’的区块并填充了具体的内容

patTemplate
基本介绍
patTemplate是一个基于PHP的模板引擎,它提供了简单而直观的语法,以下是关于patTemplate引擎的语法特点以及一个简易的使用示例:

插值:patTemplate中使用占位符$var的表示插值,用于输出变量的值,例如:
Hello, $name!

条件判断:patTemplate支持条件判断结构,使用 … 来表示,可以根据条件来控制是否输出某个区块
循环:patTemplate通过 … 语法实现循环结构,可以遍历数组并重复输出相应区块
过器:patTemplate允许使用过滤器对变量进行处理,例如:$var|lowercase表示将变量转换为小写形式
注释:使用来添加注释,这样可以在模板中添加注释信息而不会影响渲染结果
简易示例
下面是parTemplate的一个简易使用示例,在上述示例中我们首先引入了patTemplate的文件,然后创建了一个patTemplate对象。接着使用setBasedir方法设置模板所在的目录,然后使用addVar方法添加变量到模板,例如:将 name变量设置为’John Doe’,最后使用display方法显示名为index.tpl的模板

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
require_once('pat/patTemplate.php'); // 引入 patTemplate 的文件

// 创建 patTemplate 对象
$template = new patTemplate();
$template->setBasedir('path/to/templates'); // 设置模板所在目录

// 添加变量到模板
$template->addVar('name', 'John Doe');

// 显示模板
$template->display('index.tpl'); // 显示名为 index.tpl 的模板
?>