Проблема с проверкой подлинности формы - PullRequest
1 голос
/ 09 июля 2009

Я использую аутентификацию по форме на моем сайте ASP.NET 2.0. Сегодня во время тестирования я столкнулся с серьезной проблемой.

После аутентификации у меня есть страница по умолчанию createuser.aspx. С этой страницы я создаю нового пользователя. Работает нормально.

Есть кнопка выхода из системы, в которой я очищаю все сессии и перенаправляю их на страницу входа. Все работало нормально.

Во время тестирования я использовал fiddler, в котором я перетаскиваю url createuser.aspx в опцию построителя запросов fiddler и после изменения значения текстового поля внутри fiddler я нажимаю на execute. Я был в шоке, информация сохраняется в базе данных.

Это означает, что мне не хватало какой-то важной вещи при аутентификации в форме asp.net, потому что после выхода из системы все сеансы / куки-файлы должны истечь, а fiddler не должен работать.

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

Ответы [ 2 ]

2 голосов
/ 09 июля 2009
1 голос
/ 22 июля 2009

Выход из вашего веб-приложения очистит ваши куки, да.

Однако, перетаскивая предыдущий запрос в Fiddler и отбрасывая его в построителе запросов, скопирует файл cookie аутентификации .

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

Если в разделе «Заголовки запроса» Fiddler вы удалите часть файла cookie, начиная с .ASPXAUTH = до следующего включительно; и, вероятно, также значение ASP.NET_SessionId, вы увидите, что оно работает так, как вы ожидаете.

Если вы хотите убедиться, что такого рода поведение невозможно, вы, вероятно, также захотите сохранить какой-нибудь флаг «Logged In This Session», который вы также очистите при выходе из системы и проверите для этого значение в выделенном фрагменте кода CreateUser (или некоторого базового класса, если вам нужно такое поведение на нескольких страницах) перед выполнением вставки.


Изменить, чтобы ответить на комментарии:

Тогда вам помогут несколько вещей:

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

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

ASP.NET должен повторно проверить cookie, поскольку именно так аутентификация может охватывать тайм-ауты сеансов и перезапуски приложения - при удалении всех данных сеанса приложение не может узнать, является ли запрос из fiddler сеанс, который просто уничтожен, или тайм-аут или был создан до последнего перезапуска.


Дальнейший ответ на комментарии:

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

Общие сведения о билете и cookie для проверки подлинности с помощью форм

Cookie проверки подлинности с помощью форм - это не что иное, как контейнер для проверки подлинности с помощью форм. Билет передается как значение файла cookie проверки подлинности форм с каждым запросом и используется для проверки подлинности форм на сервере для идентификации пользователя, прошедшего проверку подлинности.

Как я уже говорил ранее, если билет проверки подлинности в файле cookie не был принят сервером без какой-либо другой информации о пользователе, то постоянные файлы cookie не будут работать, и независимо от того, как часто пользователь выбирает «Запомнить» я в следующий раз ", сервер их не запомнит, поэтому я рекомендую вам не полагаться только на состояние аутентификации, но и на какое-то значение в сеансе (которое не будет существовать для запроса Fiddler после выхода из системы, поскольку сервер уничтожит эту информацию).

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