2010-09-18 24 views
1

用于php的现代模板引擎(比如dwoo或smarty)可以使用对象作为变量。你可以使用{$ obj-> method()},这非常方便,我使用了很多。 但是,直接从ORM导出对象时存在明显的安全问题,这些问题有插入,删除等方法。 是否有任何一种仅将部分方法暴露给模板引擎的方法?我想包装只公开白名单的方法:如何以安全的方式在模板中使用对象

$aTplVars = array (new TplWrapper(new User($nUserId), array('getAccount','getStatus'))); 

你在想什么(有明确的性能开销)?或者也许在某些现有的PHP模板引擎中有类似的东西?

+0

@ts这没有任何意义。如果攻击者执行远程代码,那么你已经丢失了。它的支票队友,没有什么可以做的。整个安全点首先是阻止这种情况发生。确保你需要确定谁是威胁。由于这些原因,我建议从这篇文章中删除[security]标签。 – rook 2010-09-19 00:12:29

回答

0

创建后,您不能“瘫痪”PHP(或任何我知道的语言)中的对象。使用对象看起来不错,但是您应该在控制器中获取模板的相关数据,并将其放入一个数组中,您可以安全地将其分配给模板。

+0

问题是存在嵌套的对象(user-> account-> history-> .. etc),并且需要执行一些代价高昂的操作,具体取决于当前视图 – 2010-09-18 09:05:55

+0

,并且只是为了添加,您可以“瘫痪”在PHP中的对象 - 你可以使用runkit,你也可以在python中执行它,并且有许多语言允许像变量一样操纵方法和函数。 – 2010-09-18 09:09:52

+0

以前从未见过runkit,感谢注意(虽然在运行时删除方法有点不舒服)。 – halfdan 2010-09-18 09:16:07

相关问题