Есть ли способ автоматической фильтрации параметров getRequest () в Zend? - PullRequest
1 голос
/ 15 мая 2009

Я не хочу вызывать фильтр Zend в моем коде после каждого getRequest-> getParam ('x'), если мне не нужно. Есть ли ленивый способ фильтровать все внутри getRequest волшебным образом?

Редактировать: Когда я говорю «фильтр», я имею в виду экранирование тегов, очистку XSS и экранирование любых экранирующих символов sql.

т.е:

$myVar = $this->getRequest()->getParam('x');
filter the variable, escape sql stuf... etc 

Какой стандарт? Как ты это делаешь?

Ответы [ 4 ]

6 голосов
/ 15 мая 2009

Есть несколько способов справиться с вашей ситуацией.

Прежде всего, вы можете получить все параметры сразу:

$params = $this->_request->getParams(); //_request is equivalent to getRequest()

Таким образом, ленивый способ отфильтровать все ваши параметры будет использовать ***** при объявлении ваших фильтров, что означает все поля, и будет выглядеть примерно так:

$filters = array('*' => array('StringTrim','HtmlEntities','StripTags'));
$input = new Zend_Filter_Input($filters,$validators,$params);
if($input->isValid()) {
     //blah blah blah
}

Вы должны прочитать больше об объекте request , а также о фильтрах , входных фильтрах и средствах проверки .

1 голос
/ 15 мая 2009

Единственный способ - сделать это всеми способами.

  • используйте Zend_Filter_Input (как отмечено выше karim79), чтобы отфильтровать вещи по тому, как они должны храниться или просматриваться (удаление тегов с StripTags, приведение к Int, StringTrim и т. Д.) проверка, где требуется проверка, но не htmlentities, поскольку это, вероятно, должно быть сделано в выходных данных, чтобы избежать сложностей в поиске по БД и т. д. В большинстве случаев поля должны быть индивидуально сглажены / проверены.

  • всегда использовать параметризованные запросы (Zend_Db_Select с? Заполнителями) или, по крайней мере, использовать экранирующие функции db

  • при необходимости экранируйте все выходные данные (Zend_View_Helper_Escape -> $this->escape()).

0 голосов
/ 15 мая 2009

Возможно, он ищет способ перегрузить метод getRequest () и затем отфильтровать внутри нового созданного метода объект запроса.

Выезд: http://framework.zend.com/manual/en/zend.controller.plugins.html

Тогда вы можете просто использовать класс Zend_Filter или создать свой собственный класс фильтра, перегружающий вышеприведенное.

0 голосов
/ 15 мая 2009

Ответ karim79 охватывает получение параметров в одном массиве.

Как правило, для очистки данных вам не нужен Zend_Filter для каждого запроса.

Чтобы предотвратить XSS, вы должны избегать вывода данных в представлении:

$this->escape($someUserSuppliedData)

и при работе с Zend_Db некоторые методы, такие как вставка и обновление, будут указывать для вас данные. При построении запросов вручную вы можете использовать функции Zend_Db, такие как quote

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...