Эффективная, безопасная проверка подлинности и использование ie - PullRequest
3 голосов
/ 03 марта 2020

Я унаследовал приложение Coldfusion. Код очень старый (вспомните дни Allaire), и я постепенно обновлял его. Недавно мы перенесли тестирование на пентрацию, которая не прошла во многих областях. В данный момент я фокусируюсь на функциональности входа в систему, а именно на том, как хранить и использовать куки. Недавно мы обновили до CF 2018 Windows.

. Сайт в настоящее время доступен только через RDS, но будет доступен через общую сеть в ближайшем будущем.

В настоящее время код устанавливает «Rememberme» повара ie onLogin следующим образом, используя кучу запутывания. Я думаю, что это было заимствовано из примера Бена Наделя: https://www.bennadel.com/blog/1213-creating-a-remember-me-login-system-in-coldfusion.htm

<cfset strRememberMe = (
        CreateUUID() & ":" &
        SESSION.User.ID & ":" &
        SESSION.User.Name & ":" &           
        SESSION.User.Billing & ":" &            
        SESSION.User.Admin & ":" &          
        SESSION.User.Reversals & ":" &          
        CreateUUID()
        ) />

<cfset strRememberMe = Encrypt(
        strRememberMe,
        APPLICATION.EncryptionKey,
        "cfmx_compat",
        "hex"
        ) />

<cfcookie
        name="RememberMe"
        value="#strRememberMe#"
        expires="never"
        httponly="true" <!--- Set in CFAdmin so not reqd here --->
        />

Несколько разрешений пользователя включены в этот повар ie, помечая пользователя как имеющего доступ к определенным части сайта и / или выполнять определенные функции.

Я бы хотел полностью исключить ненужные данные из списка повара ie, возможно, оставив там только идентификатор пользователя. Можно проверить, возможно, в методе application.cf c onRequest (), чтобы проверить cook ie и выполнить запрос к базе данных, а затем установить переменные сеанса, связанные с разрешениями пользователя. В настоящее время application.cf c onSessionStart () анализирует пользовательские полномочия из cook ie для создания переменных области сеанса. Проблема с наличием только необработанного идентификатора пользователя в кулинарии ie заключается в том, что идентификатор пользователя может быть довольно легко угадан, поэтому, вероятно, все еще будет необходим какой-то тип запутывания или шифрования.

Из моего прочтения я понимаю, что cfmx_compat обеспечивает слабое шифрование.

Я ищу самый чистый и эффективный способ обезопасить повара ie от любого типа сторонних или MITM-атак / атак и использовать его в приложении. Я прочитал почти все в inte rnet об этом, и люди делают и предлагают разные вещи. Мой мозг перегружен идеями прямо сейчас. Я не хочу быть модным, просто эффективным.

На сайте сейчас нет SSL или TLS, но он скоро будет реализован, что должно помочь в вопросах безопасности.

1 Ответ

1 голос
/ 03 марта 2020

Подумайте о «Помните меня» с теми же проблемами безопасности, что и при обычных учетных данных. Не включайте конфиденциальную информацию, скорее сохраните все остальные данные в базе данных и получите к ней доступ только после аутентификации пользователя.

У повара ie есть способ идентифицировать пользователя и секрет с достаточным количеством длина / энтропии. Секрет должен быть хеширован (например: bcrypt) в базе данных, поэтому, если кто-то увидит вашу базу данных, он не сможет просто отправить данные в Cook ie для аутентификации любого пользователя. Вы можете включить имя пользователя в команду cook ie или создать случайную строку для каждого пользователя, которую можно использовать вместо нее.

У вас были другие проблемы или вопросы?

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