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;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top