保护Smarty - >获取所有指定变量的任何方式?

时间:2013-02-08 10:02:52

标签: php security smarty

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

到目前为止,我已禁止使用{php} - 标记,只能访问{$smarty.now}。我想知道是否有办法,因为模板中存在Smarty,将所有指定的变量都输入到模板中?如果是这样,如何请求所有已分配变量的列表,以便我可以对其进行检查并将其排除在解析之外(意味着:在用户提交之后省略tpl-source)。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

引自the API documentation

  

名称

     

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