PHP - 改变<! - ?=? - >的行为

时间:2013-12-27 11:37:04

标签: php escaping xss htmlspecialchars

我正在使用php开发一个Web应用程序,并根据我的需求创建了一个小框架。该框架的一部分是模板引擎,我可以在其中将值列表提供给html模板。

在这些模板中,我非常依赖

之类的结构
<?= $value ?>

在约定的情况下,$ value不能包含应该如此处理的html标记。有了这个,我想我应该能够使用

对我的应用程序进行xss证明
<?= htmlspecialchars($value) ?>

<?= htmlentities($value) ?>

在适当的地方。

但是,因为我要求$ value不能包含任何html标记,所以我注意到我可以要求每次出现都被转义,而不会丢失功能。

当然,只是总是明确地调用'htmlspecialchars'似乎是一个荒谬的写入开销量,因此我想知道是否有办法使这个调用隐式?

以这种方式,

<?= $value ?>

总是等同于

<?= htmlspecialchars($value) ?>

感谢。

1 个答案:

答案 0 :(得分:1)

覆盖默认的php功能可能不是一个好主意,因为迟早的外国代码可能会进入你的项目,不符合你的机会。

我会采用另一种方式将调用添加到htmltentities作为模板引擎的默认函数。你如何为它分配变量?例如,我曾经写过一个小模板引擎,基本上使用this->view->assign('name',$var)调用将变量传递给模板,并在我处理的指定变量之前在代码部分中进行转义(您还可以添加方法{{1它真正传递原始内容而不转义。

当然,如果你传递数组,你将不得不处理它们recursiveley,也处理键。如果你传递对象,一切都可能变得更加困难,因为你可能不想在这里自动替换值并事先克隆它们可能会变得昂贵。您仍然必须知道您传递到模板中的内容,但它可以帮助您避免最常见的错误。也许您应该看看像Smarty3或Twig这样的现代模板引擎如何解决这些问题。