У меня нет понятия о безопасности ZF. Должен ли я использовать фильтр при работе в базе данных? Может быть, связывание достаточно? Как насчет этого:
$users->update($data, 'id=1');
Следует ли каким-то образом отфильтровать массив данных? Не стесняйтесь писать все, что вы знаете о проблеме.
Не могли бы вы дать некоторые ссылки на хорошие статьи о безопасности в ZF (в основном, о SQL Injection и XSS)?
Короткий ответ
В то время как ZF берет и предоставляет некоторые меры для защиты вашего приложения, вы все равно должны применять те же меры предосторожности, которые будете использовать без Zend Framework.
Что касается фрагмента кода, ознакомьтесь с Главой в Zend_Db в Справочном руководстве :
По умолчанию значения в вашем массиве данных вставляются с использованием параметров. Это снижает риск возникновения некоторых проблем безопасности. Вам не нужно применять экранирование или цитирование значений в массиве данных.
Это не значит, что вам не нужно беспокоиться о безопасности. Например, для метода Update выше
Третий аргумент – это строка, содержащая выражение SQL, которое используется в качестве критериев для строк, которые нужно изменить. Значения и идентификаторы в этом аргументе не цитируются и не экранируются. Вы несете ответственность за то, чтобы любой динамический контент был интерполирован в эту строку безопасно. См. Раздел « Ценности и идентификаторы» для методов, которые помогут вам в этом.
Обратите внимание, поскольку вы используете Zend_Db_Table
очевидно, третий аргумент является вторым аргументом. Внутренне экземпляр таблицы делегирует вызов адаптеру db, причем первым параметром является табло-имя экземпляра таблицы.
Что касается векторов атаки Zend_View и XSS:
Zend_View поставляется с исходным набором вспомогательных классов, большинство из которых связаны с формированием элемента элемента и автоматически выполняют соответствующее выходное экранирование.
Опять же, большинство из них не означает все. Zend_View
предоставляет Zend_View :: escape (), чтобы помочь вам дезинфицировать вывод, но это ничего особенного.
Эта же концепция применима для Zend Framework и для любого другого веб-приложения / библиотеки / любого, что управляет данными пользователя:
Всегда проверяйте ввод пользователя. Не доверять никому.
Если вы ожидаете строку, убедитесь, что вы получили строку. Это может быть выполнено с использованием библиотек фреймворков (например, в этом случае вы используете фреймворк Zend) или вручную реализуете функции проверки.
Валидация должна ВСЕГДА выполняться на стороне сервера. Также должна присутствовать проверка на стороне клиента, чтобы обеспечить лучший пользовательский интерфейс.
В случае Zend обратитесь к странице «Проверка» из руководства.
Связывание должно предотвращать SQL-инъекцию, но оно ничего не делает для предотвращения XSS. Вы должны всегда отфильтровывать свои данные по мере необходимости и при эхо-выходе в представлении вы должны избегать всего, что может быть опасно.
echo $this->escape($this->foo);
Я предлагаю использовать Zend Filters, где вам нужно что-то конкретное. Вы можете использовать это в любой точке вашего приложения.
Параметр запроса
$alpha = new Zend_Filter_Alpha(); $name = $alpha -> filter($this -> _request -> getParam('name')); //while processing url parameters
База данных
$int = new Zend_Filter_Int(); $select -> where("id = ?", $int -> filter($id)); //during db processing also
Также в Элементах Форм. Я пропущу это, так как пример этого можно найти ненавязчиво.