У меня проблема со смешиванием частей моего сайта по 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?