0

我有一个 Zend 项目,经过一段时间的研究,我遇到了这个想法。当然,这是与安全相关的,目的是避免 xss 攻击。

其他解决方案是在显示它们之前将它们转义,但这将包括许多特殊情况,有时因为 Zend 没有实现类似的东西。

这些是在 phtml http://codeutopia.net/blog/2007/11/10/how-to-automatically-escape-template-variables-in-zend_view/https://codeutopia.net/blog/2007/11/10/how-to-automatically-escape-template-variables-in-zend_view/ /github.com/chikaram/gnix-view

这些有点太老了,也许有人已经遇到了这个问题,并且已经提供了更好的解决方案,以及 Zend 必须提供的我还没有找到的新功能。

那么,当我确实希望在我的值中包含 javascript 代码时,在将它们添加到 db 并为罕见的特殊情况创建排除数组之前转义值是否是一个好习惯?

如果您有更好的解决方案,链接和示例将不胜感激。

4

3 回答 3

5

不,它不会,因为数据库是用于存储数据,而不是“数据已经转义以在特定介质上呈现”。

考虑例如。您将来需要将其导出为 PDF,而不是在 HTML 中显示。通过使用您的方法,这将非常困难,因为数据库中的数据已经被破坏了。

于 2012-08-07T08:42:03.247 回答
2

当您拥有所有转义的 HTML 然后需要在 JSON API 中使用它时会发生什么?人们会想知道为什么他们的信用卡账单显示为Smith & associates.

逃跑是最后一分钟完成的,这是有原因的。转义是上下文相关的。您只能在 HTML 内部转义 HTML,就像您以不同的方式为 SQL 转义字符串一样。通过在最后一分钟转义,您可以保持实际数据可用于以不同方式进行合理搜索和转义。

此外,如果你在 ZF 中使用 MVC 的东西,你应该只能$this->escape()在视图中使用。

像:

Username: <?php echo $this->escape($this->username)); ?>
于 2012-08-07T08:39:01.110 回答
1

验证输入,转义输出。

你不能打败这个。如果您希望用户提供不是 HTML 的内容,您首先要验证他是否这样做(并过滤掉其他任何内容)。接下来,将它保存在 DB 中(您需要将其转义以供 DB使用(Zend_Db_Adapter::quote() 或 mysql_real_escape_string)。最后从 DB 加载输出它使用适当的转义- Zend_View->escape())。事情如果将其回显到 JavaScript 代码中会有所不同。比您需要使用 javascript 转义函数对其进行转义(对于任何其他格式也是如此)。

于 2012-08-07T17:45:50.460 回答