我创建了一个额外的层,用户可以在某种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); ?>