1

我创建了一个额外的层,用户可以在某种 HTML 模板模块中使用自己的 Smarty 代码,但我需要确保它已保存。

到目前为止,我已经禁用{php}-tags 并且只能{$smarty.now}访问。我想知道是否有一种方法,因为模板中存在 Smarty,可以将所有分配的变量都分配给模板?如果是这样,如何请求所有已分配变量的列表,以便我可以对此进行检查并将其排除在解析之外(意味着:一旦用户提交,就忽略 tpl-source)。

非常感谢我忽略的“保护”/限制 Smarty 访问的任何帮助或贡献。

4

2 回答 2

1

首先,采取过于强大的方式并限制它以保护它是一种错误的方法。众所周知,Java 在他们的浏览器插件上多年来一直失败。相反,如果您想拥有真正安全的解决方案,我建议您编写自己的微型模板引擎,该引擎只有您需要提供给用户的功能。在那种情况下,坏人就没有办法剥削了。

于 2013-02-08T10:31:27.653 回答
0

如果我理解正确,您正在寻找的是$smarty->getTemplateVars();这将为您提供一个包含已分配模板变量的名称/值的数组。

引用API 文档

姓名

getTemplateVars() — 返回分配的变量值

描述

array getTemplateVars(string varname);

如果没有给定参数,则返回所有已分配变量的数组。

例 14.31。获取模板变量

<?php
// get assigned template var 'foo'
$myVar = $smarty->getTemplateVars('foo');

// get all assigned template vars
$all_tpl_vars = $smarty->getTemplateVars();

// take a look at them
print_r($all_tpl_vars);
?>
于 2013-11-15T10:51:25.503 回答