Проверка на наличие безопасного куки и перенаправление не-HTTPS-родителя внутри HTTPS-модального - PullRequest
1 голос
/ 16 июня 2011

У меня проблема со смешиванием частей моего сайта по HTTP / HTTPS, что немного сложно объяснить. По сути, сайт построен так, что:

  • Домашняя страница и страницы общедоступного контента отправляются по HTTP
  • Все страницы, требующие авторизации, отправляются по HTTPS

Я добавляю функцию «Запомнить меня» на сайт, на котором ключ сеанса отправляется пользователю в виде безопасного файла cookie. Это отлично работает для авторизованных областей ( HTTPS ) сайта - я могу удалить сеанс PHP для пользователя, и он будет воссоздан с помощью файла cookie безопасного сеансового ключа, когда я снова зайду на эти авторизованные страницы.

У меня есть кнопка входа в систему на страницах сайта, которые отправляются в незашифрованном виде. Эта кнопка входа в систему запускает модальное окно, и содержимое этого модального окна передается через HTTPS. Защищенный файл cookie сеансового ключа отправляется в запросе для этого модального окна, поскольку он находится через безопасное соединение. Если обнаружен этот файл cookie сеансового ключа, мне нужно закрыть модальное окно и перенаправить родительскую страницу в авторизованный раздел сайта.

// this script running on https://somewhere.com/account/ in an iframe
// whose parent is http://somewhere.com/ (non-HTTPS)
<?php if ( $already_authorized ): ?>
    <script type="text/javascript">
        $(document).ready(function redirectParent() {
            parent.jQuery.fancybox.close();
            parent.window.location.href = 'https://somewhere.com/account/';
        });
    </script>
<?php endif ?>

У меня проблемы с предотвращением междоменных сценариев, так как загрузка модального окна из https://somewhere.com/account/ пытается выполнить функцию JS в родительском окне, http://somewhere.com.

<Ч />

Итак, моя дилемма в краткой форме:

  • Незащищенные страницы содержат ссылки на модальное окно входа в систему, которое загружается по HTTPS
  • Модальное окно входа в систему может проверять наличие cookie сессионного ключа, так как оно отправлено по безопасному соединению
  • Модальное окно входа не может сказать, что его родитель закрывается с JS, потому что оно было загружено по другому протоколу
  • Модальное окно входа не может загружаться через незащищенное соединение. Это дало бы JS доступ к родителю, но тогда безопасный cookie не был бы доступен.

Если мой вопрос имеет достаточно смысла, я хотел бы знать: есть ли способ обойти эту неприятную проблему? Или я собираюсь закончить загрузкой всего сайта (как открытого, так и частного) через HTTPS?

1 Ответ

0 голосов
/ 17 июня 2011

Я нашел решение!Это, вероятно, не самый элегантный, но он работает и поддерживает тот же уровень безопасности, насколько я вижу.

  • При входе в систему сохраняйте два куки.
    1. Защищенный файл cookie, содержащий сеансовый ключ
    2. Необеспеченный файл cookie, в котором хранится «разрешенное» состояние: true или false
  • На незащищенных страницах, проверьте наличие незащищенного куки.
    • Если значение незащищенного куки-файла равно true, предполагает, что пользователь авторизован , и отображает ссылки на защищенную страницу "Моя учетная запись" ( немодально ).
    • Когда пользователь заходит на страницу «Моя учетная запись» через HTTPS, проверяется безопасный cookie.Если все хорошо, страница отображается как обычно.Если сеансовый ключ не существует или не проверен, оба куки удаляются, и пользователь перенаправляется на домашнюю страницу.
  • На защищенных страницах процесс остается тем же - проверкаЗапустите файл cookie с ключом безопасного сеанса.
  • При выходе из системы отключите оба файла cookie.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...