Безопасность авторизации аутентификации ASP.NET Forms - PullRequest
5 голосов
/ 18 мая 2010

Я использую проверку подлинности с помощью форм на веб-сайте ASP.NET MVC и сохраняю имя пользователя для учетной записи в AuthCookie следующим образом:

FormsAuthentication.SetAuthCookie(account.Login, false);

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

Ответы [ 3 ]

4 голосов
/ 18 мая 2010

Файл cookie будет зашифрован и дешифрован на стороне сервера, поэтому, если пользователь не сможет взломать ключ шифрования, он или она не сможет этого сделать.

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

2 голосов
/ 18 мая 2010

Нет, это невозможно (ну, теоретически, возможно, но на практике это невозможно). Значение файла cookie аутентификации зашифровано, поэтому пользователь не может вмешаться в него. Рекомендуется сохранить (уникальное) имя пользователя в файле cookie аутентификации, поскольку при восстановлении объекта IIdentity (HttpContext.Current.User) значение, переданное вами в SetAuthCookie, используется для свойства Name из IIdentity. Свойство Name будет показано, если вы, например, используете LoginStatusControl, поэтому неплохо, чтобы значение свойства Name имело смысл для пользователя.

1 голос
/ 18 мая 2010

Cookies зашифрованы, так что шансы на это довольно малы. Но все же.

Несколько подходов к собственности

Если вы хотите повысить безопасность, вы можете сохранить имя пользователя, а также идентификатор пользователя или другие данные, которые невозможно угадать по имени пользователя. Комбинация из них делает его более безопасным, потому что если вы можете угадать одно, то сложнее угадать другие и использовать правильную комбинацию из них. То есть. Если вы угадаете адрес электронной почты / имя пользователя другого пользователя, то будет сложнее угадать идентификатор того же пользователя, потому что они не связаны. Таким образом, чем больше несвязанных свойств вы комбинируете, тем больше шагов требуется для получения правильной комбинации.

Подход с использованием маркера безопасности входа в систему

Вы можете использовать альтернативный подход, описанный в этом сценарии:

  1. Пользователь входит в систему.
  2. Создание случайного маркера безопасности входа, который может иметь произвольную длину с определенной минимальной длиной, и сохранить его для пользователя в хранилище данных. Вероятно, это не проблема, хотя довольно часто при входе в систему хранятся и другие данные, такие как LastLogonDate info.
  3. Используйте этот токен и сохраните его в файле cookie вместо имен пользователей или другой информации.
  4. Если пользователь выходит из системы, удалите маркер безопасности входа из хранилища данных
  5. Пользователь снова входит в систему ... вернитесь к 1, снова создайте новый токен и используйте его в этом сеансе.

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

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

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