2016-04-29 3 views
0

Каждый раз, когда пользователь пытается получить доступ к нашему сайту с HTTP, они перенаправляются на HTTPS с помощью этого кода в Application.cfc:ColdFusion Отслеживание сеанса HTTP против HTTPS

If (CGI.HTTPS != "on") { 
     location(url="https://#Application.PortalApp.GetDomain()##CGI.SCRIPT_NAME#?#CGI.QUERY_STRING#", addtoken="false"); 
    } 

Странная вещь, если они никогда не доступ к сайту через http, но произойдет щелчок внутренней ссылки, которая указывает на http вместо https, они выходят из системы. Однако, как только они снова войдут в систему, они смогут получить доступ к http-ссылке, перенаправить на https и войти в систему.

Я выполнил некоторую поэтапную отладку, а сеанс https перезаписывается, когда пользователь получает доступ к http. Но как только пользователь обращается к http, https использует sessionid.

Это правильное поведение?

В настройках сеанса администратора ColdFusion значение HTTPOnly равно true, а для защищенного cookie установлено значение false.

ответ

2

Думайте о них как о двух совершенно разных доменах.

Сессия под номером HTTPS является совершенно другой сессией от одной под HTTP. Вот как это работает.

Вместо того чтобы управлять им на уровне кода приложения, вы должны настроить ваш веб-сервер, чтобы разрешать подключения только через HTTPS и автоматически перенаправлять HTTP на HTTPS.

Более подробную информацию можно найти в этом Google Developer page, но я вставлю блики.

HTTPS защищает целостность вашего сайта

HTTPS помогает предотвратить злоумышленник от подделки коммуникаций между вашими сайтами и браузерами ваших пользователей. Злоумышленники включают намеренно злонамеренных злоумышленников и законных, но навязчивых компаний, таких как интернет-провайдеры или отели, которые вводят объявления на страницы.

HTTPS защищает конфиденциальность и безопасность пользователей

HTTPS позволяет злоумышленникам возможность пассивно слушать на связи между вашим веб-сайтов и пользователей.

Вы хотите, чтобы убедиться, что внутренние ссылки на вашем сайте никогда не явно с помощью HTTPS, так что смотрите в настройке <base href="https://{yourDomain}" > в файлах верстка, чтобы заставить все относительную URL-адреса для использования HTTPS.

+0

Отметить это как ответ, однако важно отметить, что идентификаторы http session ids передаются в https в порядке, просто не наоборот. – Brad

0

Пара предложений:

  • Easy один первый: это может быть не правильное направление, но что произойдет, если, вместо того чтобы использовать CGI.HTTPS, вы используете CGI.SERVER_PORT_SECURE?

  • Если CF переписывает сеанс при переключении с https на http, почему бы просто не обработать это на переднем конце веб-сервером, а не через CF? IIS и Apache имеют простые перезаписи или переадресации, которые могут сэкономить некоторое время на попытке справиться с CF, особенно если все ваше приложение в любом случае безопасно.

0

Кажется, что проверка того, что пользователь вошел в систему, находится перед проверкой и перенаправлением HTTP на https. Если возможно, вы должны сначала проверить https (перенаправить, если есть http), а затем проверить, что вы вошли в систему.

+0

Нет, проверка сеанса после проверки HTTPS. – Brad

+0

Итак, пользователь нажимает http, перенаправляется на https, а затем запрашивает логин? Что заставляет пользователя отказаться от https-сессии при нажатии на кнопку http? –

+0

Когда пользователь обращается к нашему сайту с помощью https, он получает уникальный идентификатор сеанса от ColdFusion. Если они затем получают доступ через http (например, устаревшую ссылку в рамках или старую закладку), этот идентификатор сеанса https перезаписывается тем, который они получили через http за короткую секунду, прежде чем они были перенаправлены с http на https нашим Application.cfc (и в результате они выходят из системы). Если они попадают через http до входа в систему, они не будут выходить из системы при нажатии на ссылку http после входа в систему. Это объясняет, что перенос http-сеансов на https, но не наоборот. – Brad

1

У меня была такая же проблема, и это исправлено.

На сервере Server2008 в диспетчере IIS откройте свойства ASP, разверните «свойства сеанса» и измените «Новый идентификатор в безопасном соединении» на «false».

+0

Не пробовал это, но кажется логичным решением. – Brad

Смежные вопросы