1

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

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

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

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

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

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

+0

может убрать код выхода из системы .... –

+0

Привет, что вы имеете в виду «Я был шокирован информацией, сохраненной в базе данных» - разве это не значит, что должна делать страница «Создать пользователя»? Вы имеете в виду, что экран «Создать пользователя» должен только вызываться аутентифицированным пользователем? Я предполагаю, что вы не можете связаться с этой страницей в своем браузере, когда вы не вошли в систему? Не могли бы вы разместить заголовки запроса и ответа от Fiddler? –

+0

Ben, Так как я знаю, что скрипач - прокси, и каждый текст, который мы пишем, и выбираем из контроля, видны там. Infact мы можем видеть пароль в ясном тексте. Потому что мы не используем SSL, может быть причиной этого. После выхода из формы, когда мы перетаскиваем запрос createuser на «requestbuilder» в скрипт, он выполняет запрос, а также мы можем изменить значение параметра ther. Теперь проблема заключается в выходе из формы, но после этого я могу использовать скрипач и сохранить значение. Что не должно происходить Каково ваше мнение? –

ответ

1

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

Однако, увлекая предыдущий запрос в Скрипач и сбросив его на Builder Запрос будет скопировать файлы аутентификации.

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

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

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


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

Несколько вещей поможет вам тогда:

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

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

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


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

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

Understanding the Forms Authentication Ticket and Cookie

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

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

+0

Спасибо, сэр, На самом деле я боюсь, что после выхода из системы, с помощью скрипача, файлы cookie и сеансы аутентификации будут revalidate на сервере. Это означает, что хакеры могут использовать инструменты для разрыва моего приложения, вставляя данные мусора. Как я могу изменить свой код выхода из системы, чтобы после выхода из системы сервер не должен повторять запрос от скрипача. В моей форме выхода я использую следующий код Session.Abandon(); HttpContext.Current.Session.Clear(); httpcontext.current.response.cookies.remove ("AUTHCOOKIE") FormsAuthentication.SignOut(); –

+1

Вы не можете. Если файл cookie сохраняется и отправляется обратно, то как ASP.NET должен знать, что он был ранее очищен?Куки-файл аутентификации не связан с сеансом (и даже тогда cookie-файл сеанса также будет сохранен и отправлен - хотя недавно воссозданный сеанс не будет сохранен в состоянии сеанса). Это действительно не уязвимость. – blowdart

+0

@Blowdart - Согласитесь, что это так, как это должно сработать - как я сказал в своем редактировании, как еще будет сохраняться cookie-файл cookie за пределами перезагрузки приложения и т. Д.? Вот почему, если это вас беспокоит, вы также должны проверить некоторую ценность на основе сеанса - это не будет воссоздаваться запросом скрипача. –

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