确保Smarty的安全->;任何获取所有分配变量的方法


Securing Smarty -> any way of getting all assigned variables?

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

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

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

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

如果我理解正确,您要查找的是$smarty->getTemplateVars();。这将为您提供一个数组,其中包含指定模板变量的名称/值。

引用API文件:

名称

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

说明

array getTemplateVars(string varname);

如果没有给定任何参数,则返回一个包含所有赋值变量的数组。

示例14.31。getTemplateVars

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