Intereting Posts
Получение специальных символов из базы данных MySQL с помощью PHP Php & Sql Injection – UTF8 POC Форма ZF2: порядок упорядочения элементов Изменение адреса `from` при отправке электронной почты через GMail php json_encode не приводит к реальной строке объекта / make массиву в реальном объекте / превращает php-массив в json Как получить результаты в виде многомерного массива из mySQL и PHP? Преобразование массива массивов PHP в C # PHP Curl – проблема с файлами cookie Не удалось подключиться к базе данных с Android Запустить PHP-код внутри JavaScript? Будет ли это нормально использовать? Определите PHP-функцию в XSL и вызовите ее. Возможное? Как? DefaultPasswordHasher генерирует разные хэши для одного и того же значения Разрешенный размер памяти 134217728 байт, израсходованный в PhpExcel Сообщение об ошибке для обязательного поля, всегда показывающего Получить имя файла и номер строки начала объявления функции

Как реализовать SSL в Zend MVC

Ранее я использовал безопасные страницы, используя специальную защищенную папку (например, https-папка и папка http на сервере). Я начал использовать Zend Framework и хотел бы, чтобы части приложения (например, login) использовали https. Я искал в google и даже здесь, но не смог найти ничего, что объясняет, как справиться с этим. Могу ли я использовать https для конкретных контроллеров / действий? Благодарю.

Самый чистый способ – иметь файл .ini для конфигурации SSL, где вы можете включить поддержку SSL для уровней модели / контроллера / действий, например:

Допустим, у вас есть модуль / контроллер / действие вроде этого:
SSLModule-> IndexController-> testAction

## ini file (can be config.ini also) ssl.modules.SSLModule.require_ssl = true //-> entire module requires SSL ssl.modules.SSLModule.Index.require_ssl = true //-> entire controller requires SSL ssl.modules.SSLModule.Index.test.require_ssl = true //-> single action requires SSL 

Вы анализируете это либо через конфигурацию, либо по отдельности, и в вашем файле Bootstrap вы можете включить controllerplugin, как здесь.

Есть много других способов сделать это, но я думаю, что вы поняли идею!

class Application_Controllerplugins_Ssl extends Zend_Controller_Plugin_Abstract { public function preDispatch ( Zend_Controller_Request_Abstract $request ) { $shouldSecureUrl = false; //get the config settings for SSL $options = Application_ServiceManager::getConfig()->ssl; //if config is empty, exit if (!is_object($options)) return; //simpler to use $options = $options->toArray(); //only use it production environment if ( APPLICATION_ENV == 'production' ) { if ( ( isset($options['modules'][$request->module]['require_ssl']) && $options['modules'][$request->module]['require_ssl'] ) || ( isset($options['modules'][$request->module][$request->controller]['require_ssl']) && $options['modules'][$request->module][$request->controller]['require_ssl'] ) || ( isset($options['modules'][$request->module][$request->controller][$request->action]['require_ssl']) && $options['modules'][$request->module][$request->controller][$request->action]['require_ssl'] ) ) { $shouldSecureUrl = true; } if ( $shouldSecureUrl ) { $this->_secureUrl($request); } } } protected function _secureUrl ( Zend_Controller_Request_Abstract $request ) { $server = $request->getServer(); $hostname = $server['HTTP_HOST']; if ( ! $request->isSecure() ) { $url = Zend_Controller_Request_Http::SCHEME_HTTPS . "://" . $hostname . $request->getPathInfo(); $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); $redirector->setGoToUrl($url); $redirector->redirectAndExit(); } } }
class Application_Controllerplugins_Ssl extends Zend_Controller_Plugin_Abstract { public function preDispatch ( Zend_Controller_Request_Abstract $request ) { $shouldSecureUrl = false; //get the config settings for SSL $options = Application_ServiceManager::getConfig()->ssl; //if config is empty, exit if (!is_object($options)) return; //simpler to use $options = $options->toArray(); //only use it production environment if ( APPLICATION_ENV == 'production' ) { if ( ( isset($options['modules'][$request->module]['require_ssl']) && $options['modules'][$request->module]['require_ssl'] ) || ( isset($options['modules'][$request->module][$request->controller]['require_ssl']) && $options['modules'][$request->module][$request->controller]['require_ssl'] ) || ( isset($options['modules'][$request->module][$request->controller][$request->action]['require_ssl']) && $options['modules'][$request->module][$request->controller][$request->action]['require_ssl'] ) ) { $shouldSecureUrl = true; } if ( $shouldSecureUrl ) { $this->_secureUrl($request); } } } protected function _secureUrl ( Zend_Controller_Request_Abstract $request ) { $server = $request->getServer(); $hostname = $server['HTTP_HOST']; if ( ! $request->isSecure() ) { $url = Zend_Controller_Request_Http::SCHEME_HTTPS . "://" . $hostname . $request->getPathInfo(); $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); $redirector->setGoToUrl($url); $redirector->redirectAndExit(); } } } 

Я забыл упомянуть: добавить его в свой бутстрап:

$Zend_Controller_Front->registerPlugin( new Application_Controllerplugins_Ssl() );
$Zend_Controller_Front->registerPlugin( new Application_Controllerplugins_Ssl() );