处理输入与Zend的框架(后,获得等)
-
19-08-2019 - |
题
im重新保php在zend码和所有的代码是完整的 $_GET["this"]
和 $_POST["that"]
.我总是使用更多的phpish $this->_request->getPost('this')
和 $this->_request->getQuery('that')
(这一个是不太多的逻辑与getquery insteado的getGet).
所以我想知道如果我的方法更安全的/更好/更容易十个分量.我读Zend框架文件,必须验证自己的输入,因为请求对象不会这样做。
这使我有2个问题:
- 什么是最好的这两个?(或如果那里有另一种更好的方式)
- 什么是最佳做法验证php输入与该方法?
谢谢!
解决方案
我通常使用$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);
其他提示
延伸布莱恩的答复。
你注意到你也可以检查出来 $this->_request->getPost()
和 $this->_request->getQuery()
.如果你上一概而论 getParams()
, 它就像的使用 $_REQUEST
超全局我不认为这是可以接受在安全方面。
附加于基本用法,也可以使用简单的PHP投的需要。
E.g.:
$id = (int) $this->_request->getQuery('id');
对于其他价值观,它变得更加复杂,因此确定如报价在你的数据库查询(Zend_Db, 见引用的标识符, $db->quoteIdentifier()
)和在使用的风景 $this->escape($var);
逃跑的内容。
你不能写一种尺寸适合所有验证功能get/post数据。在某些情况下,你需要的一个领域是一个整数和其他人一个日期为实例。这就是为什么,没有输入确认在zend框架。
你将必须编写的验证码的地方,你需要它。你当然可以写一些辅助方法,但是你不能指望的getPost()来验证你的东西都...
它甚至不是getPost/getQuery地验证什么,它的工作就是让你的数据,你想,会发生什么它在那里不应将它的关切。
$dataGet = $this->getRequest()->getParam('id',null);
$valid = new Zend_Validate_Digits();
if( isset($dataGet) && $valid->isValid($dataGet) ){
// do some...
} else{
// not set
}
我总是使用更多的phpish
$this->_request->getPost('this')
和$this->_request->getQuery('that')
(这一个是不太多的逻辑与getquery insteado的getGet).什么是最好的这两个?(或如果那里有另一种更好的方式)
只是一个快速的解释上的选择 getQuery()
.措辞的选择来自什么种类的数据,而不是它是如何到达那里。获得和后都只是请求的方法,携带各种各样的信息,其中包括,在情况下的一个员额的请求,一个部分称为"后的数据"。一个得到请求没有此类框,任何的变量的数据,它所携带的是一串查询的网址(第一部分之后?).
因此,虽然 getPost()
获取数据的发布数据的部分员额请求, getQuery()
检索的数据查询串的获得或员额的请求(以及其它HTTP请求的方法)。
(注意,得到的请求不应被用于任何可能产生的一个副作用,如改变数据库的行)
因此,在回答第一个问题,使用 getPost()
和 getQuery()
方法,这种方式,可以确保数据来源(如果你不在乎 getParams()
还工作,但可以包括额外的数据)。
什么是最佳做法验证php输入与该方法?
最好的地方验证的输入是哪里的你 第一 使用它。这就是说,当你把它从 getParams()
, getPost()
, 或 getQuery()
.这样,数据始终是正确对在这里你需要它,而且如果你通过它,你知道它是安全的。请记住,如果你把它传到另一个控制器(或控制的行动),应该可能再检查一次在那里,就是安全的。你如何做到这一点取决于你的申请,但是它仍然需要进行检查。
不直接相关的主题,但是 以确保你得到一个数量在你输入,一个也能够使用$var+0 (但是如果$var is a float它保持一float) 你可以使用在大多数情况下 $id=$this->_request->getQuery("id")+0;