Secure SSL(https) Redirect Filter for Symfony
please follow the steps given below to put up specific page to https or secure url:
1) First add the following settings to your app.yml file:
all:
ssl:
insecure_host: www.avidindiainc.com/blog
secure_host: www.avidindiainc.com
secure_actions:
- { module: shop, action: register }
- { module: shop, action: checkout }
- { module: register, action: updateCardDetails }
2) Next we add our filter code to lib/sslFilter.class.php (apps/[application name]/lib):
/**
* Filter for redirecting to SSL for the pages that need it
*
* @author Sachin Makwana <sachin@avidindiainc.com>
* @version 2
*/
class sslFilter extends sfFilter
{
/**
* Execute filter
*
* @param FilterChain $filterChain The symfony filter chain
*/
public function execute ($filterChain)
{
// Only execute this filter once
if ($this->isFirstCall() && SF_ENVIRONMENT != 'dev') {
// Array of modules/actions that require move to SSL
$ssl_actions = sfConfig::get('app_ssl_secure_actions');
if (empty($_SERVER['HTTPS']) && count($_POST) < 1) {
// We're not using SSL and not POSTing data - check if we should be using SSL
foreach ($ssl_actions as $action) {
if ($this->getContext()->getModuleName() == $action['module'] && $this->getContext()->getActionName() == $action['action']) {
$new_url = sprintf('https://%s%s', sfConfig::get('app_ssl_secure_host'), $_SERVER['REQUEST_URI']);
header('Location: ' . $new_url);
exit;
}
}
// Using secure host when not required - not good
if ($_SERVER['HTTP_HOST'] == sfConfig::get('app_ssl_secure_host')) {
$new_url = sprintf('http://%s%s', sfConfig::get('app_ssl_insecure_host'), $_SERVER['REQUEST_URI']);
header('Location: ' . $new_url);
exit;
}
} elseif (!empty($_SERVER['HTTPS']) && count($_POST) < 1) {
// We're using SSL and not posting data
$dont_redirect = false;
foreach ($ssl_actions as $action) {
if ($this->getContext()->getModuleName() == $action['module'] && $this->getContext()->getActionName() == $action['action']) {
$dont_redirect = true;
}
}
if ($dont_redirect == false) {
// Redirect
$new_url = sprintf('http://%s%s', sfConfig::get('app_ssl_insecure_host'), $_SERVER['REQUEST_URI']);
header('Location: ' . $new_url);
exit;
}
}
}
// Next filter
$filterChain->execute();
}
}
3) Finally, enable your sslFilter in the application’s config/filters.yml configuration file:
sslFilter:
class: sslFilter
No comments:
Post a Comment