使用Zend框架处理输入(Post,get等)

2022-08-30 18:12:25

im在zend代码上重构php,所有代码都充满了和。我一直使用更phpish和(这个与getquery而不是getGet不太合乎逻辑)。$_GET["this"]$_POST["that"]$this->_request->getPost('this')$this->_request->getQuery('that')

所以我想知道我的方法是否更安全/更好/更容易维护。我在Zend框架文档中读到,您必须验证自己的输入,因为请求对象不会这样做。

这给我留下了2个问题:

  • 这两者中最好的是什么?(或者如果有其他更好的方法)
  • 使用此方法验证php输入的最佳实践是什么?

谢谢!


答案 1

我通常使用$this->_request->getParams();以检索帖子或网址参数。然后,我使用Zend_Filter_Input进行验证和筛选。getParams() 不执行验证。

使用Zend_Filter_Input您可以使用Zend验证器进行应用程序级验证(或者您也可以编写自己的验证器)。例如,您可以确保“月”字段是一个数字:

$data = $this->_request->getParams();

$validators = array(
    'month'   => 'Digits',
);

$input = new Zend_Filter_Input($filters, $validators, $data);

答案 2

扩展布莱恩的答案。

如您所述,您还可以签出 和 。如果你概括一下,这有点像使用超全局,我认为这在安全性方面是不可接受的。$this->_request->getPost()$this->_request->getQuery()getParams()$_REQUEST

除了Zend_Filter之外,您还可以使用简单的PHP来投射所需的内容。

例如:

$id = (int) $this->_request->getQuery('id');

对于其他值,它变得更加复杂,因此请确保例如在数据库查询中引用(Zend_Db,请参阅引用标识符)和用于转义内容的视图中引用。$db->quoteIdentifier()$this->escape($var);


推荐