CakePHP HTTPS Безопасная форма оплаты - PullRequest
1 голос
/ 05 августа 2011

Используя CakePHP 1.3, у нас есть система бронирования номеров в отелях.Форма проверки доступности должна привести пользователя к защищенной странице оплаты (https://secure.domain.com/bookings/payment). После совершения платежа пользователь получает страницу подтверждения (безопасное тоже нормально), но отсюда любые ссылки в нашем верхнем / нижнем колонтитуле должны приниматьпользователь вернулся в незащищенный домен (http://domain.com).

В настоящее время у нас настроен сертификат SSL UCC для доменов https://secure.domain.com и https://domain.com. Мы также жестко запрограммировали форму проверки доступностичтобы выполнить действие https://secure.domain.com/bookings/payment. Таким образом, мы можем заставить пользователя войти в защищенную область HTTPS, но не отступать, если мы не закодируем все наши ссылки в этом разделе.

Компонент безопасности CakeЭто сбивает с толку, и поэтому я ищу лучшее решение, чтобы это произошло.

Можно ли использовать компонент безопасности Cake для страниц оплаты HTTPS, сделать жизнь проще и сделать код более стандартизированным CakePHP? Есть другие предложения?

Ответы [ 2 ]

1 голос
/ 06 августа 2011

это довольно хороший путь: http://techno -geeks.org / 2009/03 / using-security-component-in-cakephp-for-ssl / чтобы вы выиграли 'даже не нужно ничего кодировать жестко.

0 голосов
/ 07 августа 2011

Я использовал пример из http://techno -geeks.org / 2009/03 / using-security-component-in-cakephp-for-ssl / , но нашел его проблематичным.В итоге я добавил следующее в свой app_controller.php.

Приведенный ниже код перенаправляет HTTPS на www.example.com и HTTP на example.com.Если пользователь вошел в систему (см. $loggedUser), он заставляет HTTPS для каждого соединения.

// Pages requiring a secure connection.
$secureItems = array();

// beforeFilter
function beforeFilter() {
    // Your logic...    
    $this->__checkSSL();
}

/**
 * Check SSL connection.
 */
function __checkSSL() {
    /** Make sure we are secure when we need to be! **/
    if (empty($this->loggedUser)) {
        if (in_array($this->action, $this->secureItems) && !env('HTTPS')) {
            $this->__forceSSL();
        } 

        if (!in_array($this->action, $this->secureItems) && env('HTTPS')) {
            $this->__unforceSSL();
        }
    } else {
        // Always force HTTPS if user is logged in.
        if (!env('HTTPS')) {
            $this->__forceSSL();
        }
    }
}

/**
 * Redirect to a secure connection
 * @return unknown_type
 */
function __forceSSL() { 
    if (strstr(env('SERVER_NAME'), 'www.')) {
        $this->redirect('https://' . env('SERVER_NAME') . $this->here);
    } else {
        $this->redirect('https://www.' . env('SERVER_NAME') . $this->here); 
    }
}

/**
 * Redirect to an unsecure connection
 * @return unknown_type
 */
function __unforceSSL() {
    if (strstr(env('SERVER_NAME'), 'www.')) {
        $server = substr(env('SERVER_NAME'), 4);
        $this->redirect('http://' . $server . $this->here);
    } else {
        $this->redirect('http://' . env('SERVER_NAME') . $this->here);  
    }
}
...