Сеанс входа передан другому пользователю

У меня какая-то странная проблема. Я создал веб-приложение в Lucee. Вам необходимо войти в систему, чтобы использовать веб-приложение. Как минимум дважды случалось, что сеанс входа в систему был передан другому пользователю. Чтобы уточнить, что происходит:

  1. Пользователь 1 авторизован в приложении, сессия активна
  2. Пользователь 2 заходит в веб-приложение, автоматически входит в систему и видит «Добро пожаловать в приложение пользователя 1».

Как упоминалось выше, это произошло как минимум дважды с момента запуска приложения, так что это похоже на инцидент. С точки зрения безопасности это большая проблема, потому что пользователь 1 является администратором, а пользователь 2 имеет базовый профиль доступа.

Мой вопрос: кто-нибудь признает эту проблему и может ли кто-нибудь дать мне несколько советов, как решить эту проблему.

Спасибо


person Samall    schedule 12.05.2017    source источник
comment
Как вы переживаете эту проблему? Это все еще в разработке? Вы испытываете это, используя один и тот же браузер (но разные окна?)   -  person Chester    schedule 13.05.2017
comment
Это в производстве. Мы столкнулись с этим, потому что пользователь 2 позвонил нам, чтобы сообщить о проблеме. Чтобы уточнить, что пользователь 1 и 2 никогда не встречались друг с другом, и оба используют совершенно разные компьютеры, разные сети, интернет-провайдеров, местоположения и т. д.   -  person Samall    schedule 13.05.2017
comment
Я столкнулся с этой проблемой только тогда, когда пользователи были в одной сети с помощью Firefox. Один из наиболее частых советов, который я слышал, касался включения управления сеансами J2EE. Это было на CF8+, но я думаю, что здесь можно применить то же самое.   -  person Chester    schedule 13.05.2017
comment
Я видел это с плохо контролируемым кэшированием. Возможно ли, что кешированный контент, сгенерированный для пользователя 1, возвращается для пользователя 2?   -  person CfSimplicity    schedule 13.05.2017


Ответы (2)


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

Убедитесь, что ваши функции CFC используют локальную область видимости функции:

var x = "" or local.x = ""

в противном случае x будет находиться в области переменных CFC, где ею может манипулировать любая функция внутри CFC. Это приводит к утечке данных от одного вызова к другому через сеансы. Попробуйте использовать varscoper для сканирования кода на наличие этих проблем.

В качестве альтернативы вы можете сохранить объект, содержащий данные для пользователя, в области приложения или внутри другого объекта, который хранится в области приложения. Это может позволить пользователю A получить доступ к данным, предназначенным для пользователя B, когда они одновременно вошли в систему.

Вам необходимо провести аудит своей кодовой базы на наличие подобных проблем и просмотреть логику пользовательского сеанса, чтобы проверить, где и как данные хранятся и доступны.

person Adrian J. Moreno    schedule 13.05.2017

Например, в одном из предложенных комментариев может быть, что пользователи находились в одной сети и/или использовали прокси-сервер, такой как squid который будет кэшировать весь входящий контент. Чтобы проверить, возможно ли это, посмотрите на заголовки, отправляемые вашим сервером, и посмотрите, есть ли какие-либо заголовки, связанные с кэшированием (Cache-Control, Expires, Last-Modified, ETag).

если вы хотите предотвратить кеширование, вы можете установить первый пример заголовка в вашем application.cfc onRequestStart или, по крайней мере, предотвратить кеширование пользовательского контента, вы можете сделать некоторые варианты второго примера.

<cfscript>
    //EX 1
    header name="cache-control" value="no-cache"; //no caching by anything

    //EX 2
    if(loggedIn){
        header name="cache-control" value="private, max-age=<time_in_seconds>"; //allow browser to cache content
    }else{
        header name="cache-control" value="public, max-age=<time_in_seconds>"; //allow anything to cache content
    }
</cfscript>
person Snipzwolf    schedule 16.05.2017