2013-02-26 5 views
3

Я использую ASP.NET, я использую собственный поставщик аутентификации, который я написал сам, хеширование и соление на месте, поэтому оно должно быть относительно безопасным.Обработка пользовательских сеансов в MVC/ASP.NET

Я также внедрил собственный механизм сеанса аутентификации, который работает следующим образом.

  1. Пользователь подписывается в веб-приложении, пароль проверяется на данные в mssql db.
  2. В таблицу «сеансов» вставляется новая строка, она содержит ссылку на пользователя, который вошел в систему, токен аутентификации и дату истечения срока действия.
  3. Маркер аутентификации возвращается с файлом cookie и хранится на компьютере клиента.
  4. Маркер аутентификации используется для идентификации пользователя.

Он отлично работает, но я не уверен, что это правильный путь, потому что я вижу потенциальные риски для безопасности, например, если кто-то взломает дБ и изменяет идентификатор пользователя или получает удержание токена авторизации, или я ошибаюсь?

P.S. К сожалению, я не могу использовать встроенную обработку auth/session, потому что наши клиенты просили об этом, плюс мы должны поддерживать другие db-движки, такие как mysql, oracle/etc, поэтому, пожалуйста, не предлагайте этого:

+1

«PS К сожалению, я не могу использовать встроенную обработку авторизации/сеанса, поэтому, пожалуйста, не предлагайте это» - это поможет, если вы объясните, почему вы не можете использовать встроенный материал: см. Http: // blogs.msdn.com/b/oldnewthing/archive/2013/02/06/10391383.aspx – Joe

+0

lol man .. Я обновил свой вопрос :) – jjdev80

+0

Ну, поддерживаются провайдеры ASP.NET/State, Profile и т. д. на [mysql] (http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-asp-roles.html), [Oracle] (http://www.oracle.com/ technetwork/themes/dotnet/index-087367.html) и т. д. – EdSF

ответ

1

I думаю, это почти безопасный.

Чтобы облегчить вашу озабоченность по поводу всего, что скомпрометировано при просмотре базы данных, есть некоторые способы обойти это. Если у вас нет проблем с масштабированием для нескольких серверов, вы можете создать ключ при запуске приложения. Затем используйте этот ключ, чтобы «подписать» каждый сеанс. Итак, вы можете сделать хеш чего-то вроде auth token+server key+expiration, а затем вы можете проверить это по каждому запросу сеанса.

Что касается людей, которые могут украсть токен аутентификации, у вас есть только так много вариантов. Для справки это называется «повторной атакой». Их очень сложно предотвратить, не делая ваш сайт раздражающим (о, вы хотите открыть 3 вкладки с этой страницы, вам придется войти в систему, потому что это переигровка) См. wikipedia для получения дополнительной информации. Это очень зависит от того, насколько безопасно вам быть.

+1

Я не уверен, что понимаю, что вы имеете в виду, подписывая каждую сессию, должен ли я подписывать ее на сервере и как насчет хэша? Не могли бы вы объяснить? – jjdev80

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