2010-11-03 64 views
3

我在各地都看到了不同的评论,有人说zend框架会自动清理post/get数据,但其他人却说不。zend框架消毒数据

这是怎么回事?我见过在getParams中使用foreach在predispatch中执行它是最快的方法,但是有没有人有任何建议?

回答

4

也许这笔交易是关于Zend_Controller_Request VS的Zend_Db。请求数据通常放在数据库中。

请求对象不会逃脱任何事情。你可以强迫它使用过滤器,形成过滤器或例如使用此处描述的反射技术:

Zend_Db查询基本上都是在其他ORM的逃脱像,像在PDO

+0

我的系统只使用zend_db(特别是Zend_Db_Table_Abstract),这是否意味着我只需要覆盖插入方法,并在那里逃生? – Ashley 2010-11-03 13:50:02

+1

@Ashley最简单的方法就是试试。尝试发布一些数据并将其保存到数据库。检查保存的数据是否在定义时被清除。 – takeshin 2010-11-03 13:56:51

+0

Zend_Db使用准备语句,所以数据被转义。 – Maxence 2010-11-03 14:11:17

4

它确实不自动消毒的任何请求的数据。它不能,因为那需要它知道如何来清洁它,例如,应该$_GET['foo']字符串消毒或数字?你必须告诉它。

不管你在相应的控制器动作或在ActionHelper或自动在控制器插件或自举过程中或与它们的混合物手工净化输入是由你。

使用什么是适当的。

1

它绝对不会自动为您清理变量。你可以这样做foreach或使用array_map根据上下文,例如:

$_POST = array_map('mysql_real_escape_string', $_POST); 

理想的情况下,虽然你应该逐案处理的情况下,每个变量。我个人使用PHP的filter_var进行过滤和消毒。

+2

对于请求输入,还有'filter_input'直接在请求超全局变量上工作。缺点是缺乏可测试性。你不能修改请求,所以你不得不做一个真正的请求,而不是使用模拟。 – Gordon 2010-11-03 12:34:32

+0

@戈登 - 是的好点忘了提一个 – robjmills 2010-11-03 12:46:38