我在zend代码上重新分解php,所有的代码都充满了$_GET["this"]
和$_POST["that"]
.我一直使用的更phpish $this->_request->getPost('this')
和$this->_request->getQuery('that')
(这一个是没有这么多getGet的getquery insteado逻辑).
所以我想知道我的方法是否更安全/更好/更容易保持.我在Zend Framework文档中读到,您必须验证自己的输入,因为请求对象不会这样做.
这让我有两个问题:
这两个最好的是什么?(或者如果还有另一种更好的方式)
使用此方法验证php输入的最佳做法是什么?
谢谢!
我通常使用$ this - > _ request-> getParams(); 检索帖子或URL参数.然后我使用Zend_Filter_Input进行验证和过滤.getParams()不进行验证.
使用Zend_Filter_Input,您可以使用Zend Validators进行应用程序级别验证(或者您也可以自己编写).例如,您可以确保'months'字段是一个数字:
$data = $this->_request->getParams(); $validators = array( 'month' => 'Digits', ); $input = new Zend_Filter_Input($filters, $validators, $data);
扩展Brian的答案.
正如你指出,你还可以检查出$this->_request->getPost()
和$this->_request->getQuery()
.如果你推广getParams()
,有点像使用$_REQUEST
超全球,我不认为这在安全性方面是可以接受的.
除Zend_Filter之外,您还可以使用简单的PHP来强制转换所需的内容.
例如:
$id = (int) $this->_request->getQuery('id');
对于其他值,它会变得更复杂,因此请确保在数据库查询中引用(Zend_Db,请参阅引用标识符$db->quoteIdentifier()
),并在视图中使用$this->escape($var);
以转义内容.
您不能为get/post数据编写一个通用的验证函数.在某些情况下,您需要一个字段为整数,而在其他情况下需要一个日期.这就是为什么zend框架中没有输入验证的原因.
您必须在需要的地方编写验证代码.你当然可以编写一些辅助方法,但你不能指望getPost()为你自己验证一些东西......
它甚至不是getPost/getQuery的地方来验证任何东西,它的工作是为你提供你想要的数据,从那里发生的事情应该不是它的关注.