DFe*_*oso 23 php post zend-framework get input
我在zend代码上重新分解php,所有的代码都充满了$_GET["this"]和$_POST["that"].我一直使用的更phpish $this->_request->getPost('this')和$this->_request->getQuery('that')(这一个是没有这么多getGet的getquery insteado逻辑).
所以我想知道我的方法是否更安全/更好/更容易保持.我在Zend Framework文档中读到,您必须验证自己的输入,因为请求对象不会这样做.
这让我有两个问题:
谢谢!
Bri*_*her 34
我通常使用$ 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);
Run Code Online (Sandbox Code Playgroud)
Til*_*ill 10
扩展Brian的答案.
正如你指出,你还可以检查出$this->_request->getPost()和$this->_request->getQuery().如果你推广getParams(),有点像使用$_REQUEST超全球,我不认为这在安全性方面是可以接受的.
除Zend_Filter之外,您还可以使用简单的PHP来强制转换所需的内容.
例如:
$id = (int) $this->_request->getQuery('id');
Run Code Online (Sandbox Code Playgroud)
对于其他值,它会变得更复杂,因此请确保在数据库查询中引用(Zend_Db,请参阅引用标识符$db->quoteIdentifier()),并在视图中使用$this->escape($var);以转义内容.
您不能为get/post数据编写一个通用的验证函数.在某些情况下,您需要一个字段为整数,而在其他情况下需要一个日期.这就是为什么zend框架中没有输入验证的原因.
您必须在需要的地方编写验证代码.你当然可以编写一些辅助方法,但你不能指望getPost()为你自己验证一些东西......
它甚至不是getPost/getQuery的地方来验证任何东西,它的工作是为你提供你想要的数据,从那里发生的事情应该不是它的关注.
| 归档时间: |
|
| 查看次数: |
35741 次 |
| 最近记录: |