Фиксация сессий Coldfusion - PullRequest
       7

Фиксация сессий Coldfusion

0 голосов
/ 20 января 2012

Мне нужно сбросить идентификатор сеанса после входа пользователя в приложение.Но я пробовал в течение нескольких дней, но все еще не могу сбросить cookie-файл jsessionid, и, если это так, сервер, кажется, не распознает его.Может ли кто-нибудь предоставить какое-либо предложение или примеры кода?

Вот код в login_action.cfm, где login.cfm отправляет форму в: форму входа, отправляют учетные данные пользователя в login_action.cfm.вот код в login_action.cfm:

<cfcookie name="JSESSIONID" value="0" expires="now">
<cfif IsDefined('cookie.JSESSIONID')>
    <cfheader name="Set-Cookie" value="JSESSIONID=0;expires=#GetHttpTimeString(CreateODBCDateTime(now()))#;path=/;HTTPOnly;secure=true;">
</cfif>
<cfset structclear(session)>

<cfhttp url="loginverify.cfm" method="post" >
    <cfhttpparam name="username" value="#form.username#" type="formfield" ><cfhttpparam name="password" value="#form.password#" type="formfield" >
</cfhttp>
<cfset cookieval = "#MID(cfhttp.responseheader['set-cookie'][1], 12, findnocase(";", cfhttp.responseheader['set-cookie'][1])-13)#">
<cfheader name="Set-Cookie" value="#cfhttp.responseheader['set-cookie'][1]#">
<cfset cookie.jsessionid = cookieval>
<cflocation url="myfirstpage.cfm" addtoken="no">

вот код для аутентификации пользователя в loginverify.cfm:

<!--- authenticate users --->
<!--- if user passed--->
<cfset session.gooduser = true>
<cfset session.userpermission = 1>

, но, похоже, переменные сеанса определены в loginverify.cfm не распознается в login_action.cfm

.

Есть предложения?

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 21 сентября 2012

Просто хотел добавить обновленный ответ для этого обсуждения. Со времени последних комментариев здесь, Adobe обратилась к фиксации сессии автоматически в CF.

Если вы используете CF10 или устанавливаете CF 9.0.2, это включает его.

Если у вас версия 9.0.1 или ниже (до 8.0), есть исправление безопасности, которое добавляет его: APSB11-04 (опубликовано 08.02.2011 и обновлено 3/7/2011).

Также обратите внимание, что в техническом замечании для этого исправления (http://helpx.adobe.com/coldfusion/kb/security-hotfix-coldfusion-8-8.html) также упоминается обходной путь для отключения защиты от фиксации сеанса (и он также будет применяться к тем из 9.0.2 и 10):

Если вы добавите следующее свойство JVM, -Dcoldfusion.session.protectfixation=false, в соответствующий jvm.config для вашего экземпляра CF (и перезапустите), он вернется к CF, чтобы не добавлять защиту от фиксации сеанса (что просто делает ваш сервер уязвимым). на фиксацию атаки как всегда было).

Конечно, большинству нужна защита, но, поскольку она создает некоторые проблемы для некоторых приложений (к сожалению, недостаточно хорошо документированы), просто знайте, что есть возможность отключить ее, если это необходимо.

3 голосов
/ 21 января 2012

Обновленную версию того, что вы пытаетесь выполнить, можно найти по адресу:

12Robots.com - ОБРАТНАЯ СВЯЗЬ с токеном сессии (обратная ссылка)

Однако возникает проблема не очистки дополнительных сеансов или переноса данных сеанса, которые вы хотите сохранить.

С очисткой сеанса

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

  1. Обработайте форму входа в систему и убедитесь, что пользователь действителен
  2. Создатьзащищенное сообщение, содержащее учетные данные пользователя и данные сеанса для сохранения
  3. Признать недействительным сеанс
  4. Переместить страницу на себя с защищенным сообщением в URL
  5. С новым сеансомСозданный для этого запроса страницы, войдите в систему, используя учетные данные из защищенного сообщения

Шаг 3 (аннулирование сеанса) можно выполнить следующим образом:

<cfscript>
    session.setMaxInactiveInterval(1);
    getPageContext().getSession().invalidate();
</cfscript>
<cfcookie name="jsessionid" expires="now">
<cfcookie name="cfid" expires="now">
<cfcookie name="cftoken" expires="now">

, а затем немедленноredirect (cflocation) после этого, убедившись, что для addtoken установлено значение false.

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

Это выполнит то, что вам нужно, но, вероятно, не так просто, как вы ожидали.

Простой альтернативный вариант

Еще один метод предотвращения фиксации сеанса - просто предотвратить шаг 2 в вашей ссылке .

Самое простое, если вы видите jsessionid, cftoken или cfid вurl, то cfabort запрос.Это должно быть сделано до того, как приложение активируется и устанавливает или обрабатывает клиентские куки.Таким образом, в Application.cfm это будет сделано до cfapplication, а в Application.cfc это будет сделано вне какой-либо функции (т. Е. Там, где вы устанавливаете «This.name»).идентификаторы сеанса и расположение к безопасному URL.Это также можно сделать с веб-сервера, используя mod_rewrite и др., Чтобы ColdFusion никогда не видел вредоносный URL.

Существуют дополнительные способы для выполнения этого шага 2, но все, что приходит на ум, требует либоВаш веб-сервер или компьютер пользователя будут скомпрометированы, и если это так, то фиксация сеанса - наименьшее из ваших беспокойств.

...