Защита элементов управления входа
Обновлен: Ноябрь 2007
Элементы управления входа ASP.NET позволяют реализовать решение для управления доступом к веб-страницам на основе проверки подлинности пользователей, членства и ролей. К числу элементов управления входа относятся следующие элементы управления: CreateUserWizard, Login, LoginStatus, LoginView, PasswordRecovery и ChangePassword. В этом разделе рассказывается, как повысить безопасность элементов управления входом используя рекомендации по конфигурации и кодировке.
Приведенные здесь рекомендации в отношении конфигурации и кодировки помогут повысить безопасность приложений. Но не менее важно постоянно устанавливать на веб-сервере последние обновления средств защиты для Microsoft Windows и Internet Information Services (IIS), а также все для Microsoft SQL Server или другого программного обеспечения, обеспечивающее доступ к источникам данных.
Более подробные советы и рекомендации по написанию безопасного кода и защите приложений приведены в книге «Защищенный код» Майкла Ховарда и Дэвида Леблана, а также на веб-узле Шаблоны и методики Майкрософт (на английском языке).
Сведения о специализированных методиках защиты для других типов элементов управления приведены также в следующих разделах:
Общие методики защиты для элементов управления входом
Базовой мерой защиты элементов управления входом является применение рекомендаций, коротко описанных ниже с приведением ссылок на их более подробное описание.
Использование протокола Secure Sockets Layer (SSL)
Элементы управления входом ASP.NET передают информацию серверу в виде чистого текста через HTTP-соединение. Имея дело с конфиденциальной информацией, настоятельно рекомендуется использовать протокол HTTPS с шифрованием SSL. Протокол SSL защищает данные от несанкционированного изменения (целостность данных), защищает идентификацию пользователя (конфиденциальность) и гарантирует, что данные поступили от определенного клиента (проверка подлинности). Дополнительные сведения см. в разделах Общие сведения о криптографии и Настройка протокола SSL на веб-сервере или веб-узле в документации по IIS (на английском языке).
Проверка пользовательского ввода
Ни при каких обстоятельствах вводимые пользователем данные не следует считать безопасными. Злонамеренные пользователи могут легко отправить потенциально опасную информацию из клиента в приложение. Для элементов управления входом особенно важны меры предосторожности в отношении пользовательского ввода, поскольку с их помощью вводится очень важная и строго конфиденциальная информация. Дополнительные сведения о защите от вредоносного ввода см. в разделе Основные методы обеспечения безопасности веб-приложений.
Везде, где это возможно, следует использовать проверочные элементы управления для проверки имен пользователей на допустимость, а паролей — на надежность. Однако можно проверить пользовательский ввод и без помощи проверочных элементов управления. Например, элемент управления CreateUserWizard поддерживает проверку наличия обязательного значения и проверку сравнением. Можно также задать в свойстве EmailRegularExpression регулярное выражение, используемое для проверки адресов электронной почты на соответствие определенному шаблону, а в свойстве PasswordRegularExpression — значение для проверки паролей на соответствие определенным требованиям.
Для выполнения более гибкой проверки пользовательского ввода в элементах управления входа можно использовать шаблоны. Когда это возможно, создавайте для элемента управления шаблон, а затем добавляйте в него элементы интерфейса (обычно это элементы управления TextBox) и проверочные элементы управления, максимально ограничивающие пользовательский ввод.
Примечание. |
---|
При использовании проверочных элементов управления всегда выполняйте не только клиентскую проверку, но и проверку с помощью серверного кода. Проверка на стороне сервера исключает возможность обхода этапа проверки путем отключения или изменения соответствующего клиентского сценария. |
Дополнительные сведения см. в разделе Проверка сведений, вводимых пользователем на веб-страницах ASP.NET.
Защита состояния просмотра
Элементы управления входа хранят информацию в состоянии просмотра страницы, поэтому его нужно как следует защищать. Хотя данные состояния просмотра хранятся закодированном формате, они могут быть прочитаны и изменены злонамеренным пользователем. Дополнительные сведения см. в разделе Общие сведения о состоянии представления ASP.NET.
Защита членства
Членством называется часть функциональности ASP.NET, обеспечивающая проверку и хранение учетных данных пользователей. Элементы управления CreateUserWizard, Login, PasswordRecovery и ChangePassword используют функцию членства ASP.NET, для того чтобы предоставить разработчику возможность создавать полноценную систему проверки подлинности, почти или совсем не требующую написания кода. Кроме того, элементы управления LoginName, LoginStatus и LoginView могут использоваться для реализации решения по управлению членством пользователей и доступом к страницам веб-узла. Дополнительные сведения см. в разделах Знакомство с членством и Защита членства.
Входящие в состав ASP.NET поставщики членства имеют встроенный порог, определяющий максимальное количество попыток ввода недействительного пароля; это пороговое значение задается в свойстве MaxInvalidPasswordAttempts. Кроме того, функция членства ASP.NET позволяет задать в свойстве PasswordAttemptWindow время, в минутах, в течение которого допускаются попытки ввода пароля; по истечении этого времени доступ данного пользователя к приложению блокируется. По умолчанию пороговое количество попыток ввода пароля установлено равным 5, временное окно для их осуществления — 10 минутам. Пороговые значения используемого по умолчанию поставщика могут переопределяться значениями, заданными в разделе membership файла Web.config приложения. При установке этих пороговых значений рекомендуется задавать их как можно меньшими. Кроме того, не рекомендуется устанавливать свойство RequiresQuestionAndAnswer в false, поскольку в этом случае количество попыток ввода недействительных паролей отслеживаться не будет. Дополнительные сведения см. в разделе Поставщики членства.
Защита электронной почты
Элементы управления CreateUserWizard, ChangePassword и PasswordRecovery могут отправлять сообщения электронной почты, содержащие сведения о выполненной пользовательской транзакции. Следует убедиться, чтоб все такие сообщения электронной почты, направляемые пользователям, не содержат ничего кроме самой необходимой информации. Например, нужно избегать использования таких строк темы сообщения, по которым третья сторона сможет с легкостью отфильтровывать данные сообщения в потоке всех прочих сообщений. Рекомендуется также избегать отправки паролей по электронной почте. Продумайте другие методы подтверждения транзакций, связанных с паролями, например, отправку подтверждающего кода и URL, по которому должен перейти пользователь для завершения транзакции.
Если свойство MailDefinition элементов управления CreateUserWizard, ChangePassword и PasswordRecovery не задано, никакие сообщения по электронной почте не отправляются. Если же эти элементы управления настроены для отправки сообщений по электронной почте, рекомендуется обрабатывать события ошибок, связанных с электронной почтой, чтобы перехватывать все связанные с протоколом SMTP ошибки во избежание ненужного раскрытия информации пользователям. Для элемента управления ChangePassword обрабатывайте событие SendMailError и установите свойство Handled объекта SendMailErrorEventArgs в true. Пример обработки события ошибки, связанной с электронной почтой, см. в описании события SendMailError. Сведения об установке службы Simple Mail Transfer Protocol (SMTP) см. в разделе Практическое руководство. Установка и настройка виртуальных серверов SMTP в IIS 6.0.
Защита отдельных элементов управления
В следующих разделах приведены рекомендации в отношении защиты отдельных элементов управления входа.
CreateUserWizard
Элемент управления CreateUserWizard получает данные от пользователя и создает для него учетную запись в системе членства ASP.NET. Можно расширить элемент управления CreateUserWizard таким образом, чтобы он запрашивал у пользователя дополнительную информацию, для чего добавить поля или шаги до или после шагов CreateUserWizardStep и CompleteWizardStep. Если пользователь не выполнит все шаги, предусмотренные элементом управления CreateUserWizard, но при этом будет создана учетная запись, это может создать угрозу безопасности. Поэтому для предотвращения пропуска пользователем шагов мастера следует переопределить метод OnNextButtonClick и выполнять пользовательскую проверку подлинности. Получив от пользователя всю необходимую информацию, можно выполнить создание учетной записи пользователя, вызвав принадлежащий классу MembershipProvider метод CreateUser.
Если вы выполняете административные задачи и используете CreateUserWizard для автоматического создания учетных записей пользователей, рекомендуется присвоить свойству AutoGeneratePassword значение true, а свойству LoginCreatedUser — false. В данном случае рекомендуется установить свойство DisableCreatedUser в false.
Элемент управления Login
Элемент управления Login является составным элементом управления, включающим поля для ввода имени пользователя и пароля, а также флажок, с помощью которого пользователь может указать, что его учетные данные нужно запомнить для использования при следующих входах в систему. Установка свойства RememberMeSet вызывает отправку обозревателю cookie-файла с учетными данными пользователя, а установка свойства DisplayRememberMe — отображение флажка, с помощью которого пользователь управляет отправкой этого cookie-файла. Следует избегать одновременной установки свойства RememberMeSet в true, а свойства DisplayRememberMe в false, посколькув таком случае cookie-файл отправляется без ведома пользователя. В общем случае сохранение файлов Cookie на компьютере пользователя представляет угрозу безопасности. Cookie-файлы можно рассматривать как одну из форм пользовательского ввода, а значит, как потенциальную возможность раскрытия и подмены информации. Дополнительные сведения см. в разделе Общие сведения о файлах Cookie ASP.NET.
Если элемент управления Login используется с широким диапазоном конечных пользователей, имеет смысл запрограммировать его таким образом. чтобы пользователи общественных компьютеров имели возможность использовать временные cookie-файлы, уничтожаемые по истечении времени таймаута сеанса. Дополнительные сведения о написании cookie-файлов см. в разделе Практическое руководство. Запись файлов Cookie.
Элемент управления LoginName
Элемент управления LoginName отображает имя, под которым пользователь вошел в систему, или же домен и имя учетной записи пользователя, если в приложении используется проверка подлинности Windows. Подумайте о том, чтобы добавить флажок, позволяющий пользователю указать, должно ли отображаться его имя или сведения об учетной записи. Например, пользователи, работающие не общественных компьютерах, могут не желать отображения конфиденциальной информации.
Элемент управления LoginView
Элемент управления LoginView позволяет отображать одну информацию для пользователей, которые выполнили вход, и другую для тех, которые не выполнили вход (анонимные пользователи). Проверьте содержимое, отображаемое с помощью шаблонов AnonymousTemplateLoggedInTemplate, а также шаблонов, связанных со свойством RoleGroups, чтобы убедиться, что пользователи не могут просматривать не предназначенные для них сведения. Имейте в виду, что коллекция, содержащаяся в свойстве RoleGroups, просматривается в порядке определения шаблонов. Для пользователя отображается шаблон первой подходящей группы ролей. Если пользователь является членом более чем одной роли, отображается первый шаблон группы ролей, соответствующей, какой-либо из ролей пользователя. Если с одной ролью связано несколько шаблонов, используется тот из них, который был определен первым. Дополнительные сведения см. в разделе Основные сведения об управлении ролями.
Элемент управления PasswordRecovery
Элемент управления PasswordRecovery позволяет пользователю извлечь утраченный пароль, используя адрес электронной почты, связанный с именем этого пользователя. При настройке элемента управления PasswordRecovery следуйте приведенным ниже рекомендациям.
Обрабатывайте событие SendMailError, чтобы выполнять необходимые действия в случае, если при отправке сообщения электронной почты произойдет ошибка.
Задайте в свойстве MaxInvalidPasswordAttempts максимальное количество попыток ввода пароля, и ограничьте временное окно ввода пароля с помощью свойства PasswordAttemptWindow.
Проверьте всю отправляемую пользователям по электронной почте информацию, а также защиту канала, используемого для передачи сообщений, в особенности если сообщения, используемые при восстановлении пароля, содержат пароль пользователя. Избегайте отправки сообщений электронной почты, ясно помеченных как содержащие конфиденциальную информацию, например, сообщений со словом «пароль» в строке темы.
Элемент управления ChangePassword
Элемент управления ChangePassword позволяет пользователю изменять свой пароль. При настройке элемента управления ChangePassword следуйте приведенным ниже рекомендациям.
Обрабатывайте событие SendMailError, чтобы выполнять необходимые действия в случае, если при отправке сообщения электронной почты произойдет ошибка.
Задайте в свойстве MaxInvalidPasswordAttempts максимальное количество попыток ввода пароля, и ограничьте временное окно ввода пароля с помощью свойства PasswordAttemptWindow.
Проверьте всю отправляемую пользователям по электронной почте информацию, а также защиту канала, используемого для передачи сообщений, в особенности, если элемент управления ChangePassword настроен для отправки новых паролей пользователям по электронной почте.
Используйте SSL, чтобы гарантировать невозможность несанкционированного прочтения нового пароля пользователя при обратной передаче.
Ограничьте доступ к файлу, из которого элемент управления ChangePassword считывает основную часть сообщений электронной почты, отправляемых пользователю. Этот файл определен во входящем в состав класса MailDefinition свойстве BodyFileName.
См. также
Задачи
Практическое руководство. Установка и настройка виртуальных серверов SMTP в IIS 6.0
Основные понятия
Основные методы обеспечения безопасности веб-приложений
Защита стандартных элементов управления
Другие ресурсы
Управление пользователями путем объединения их в группы