2009-09-15 2 views
2

Я использую VSTS 2008 + C# + .Net 3.5 + IIS 7.0 + ASP.Net. В моем понимании аутентификации форм, переменной сеанса (используется для идентификатора аутентификации, то есть когда пользователь прошел аутентификацию, у пользователя будет такая переменная сеанса, а переменная сеанса будет реализована как файл cookie) для аутентифицированного пользователя.Ошибка безопасности аутентификации форм

Моя забота об этом режиме - каждый раз, когда пользователь получает доступ к странице на веб-сайте, переменная сеанса будет передана на сервер. Он может быть ослаблен хакером, и хакер может использовать такую ​​переменную сеанса, чтобы претендовать на роль конечного пользователя? Это риск для безопасности?

Если это риск для безопасности, то мы должны постоянно использовать https с помощью проверки подлинности с помощью форм?

спасибо заранее, Джордж

ответ

2

У меня были аналогичные проблемы в связи с просьбой одного из наших партнеров ... (см подробно здесь: https://stackoverflow.com/questions/1367574/rewriting-urls-using-reverse-proxy)

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

Итак, теоретически это можно сделать, и это угроза. Использование SSL - это правильный способ, по моему мнению, если данные каким-либо образом чувствительны.


достаточно смешной в этой статье Microsoft Support http://support.microsoft.com/kb/910443 фразировка заставляет вас поверить, что это на самом деле то же самое для каждого запроса ...

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

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

+0

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

+1

Я не думаю, что все одно и то же время, но я посмотрю. –

+0

Если каждый запрос будет использовать другое число, я думаю, что это не должно быть угрозой безопасности? Потому что, даже если вы снижаете значение сеанса за это время, в следующий раз после изменения значения значение, уменьшенное в прошлый раз, не будет полезно. Любые комментарии? – George2

2

Вы можете обратиться к этому question еще некоторое информации. Это потенциальный риск для безопасности и предоставление действительно безопасного соединения, которое вам нужно будет использовать для HTTPS.

+0

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

2

Да, идентификатор сеанса может быть украден, обнюхивая трафик, поэтому существует риск безопасности, связанный с использованием сеанса для идентификации. Обычно считается, что он безопасен для некритических сайтов, но если у вас есть сайт, на котором важна безопасность (banking, et.c), вам необходимо использовать SSL, чтобы быть достаточно безопасным.

+0

Я хочу подтвердить с вами каждый раз, когда одна и та же переменная сеанса, используемая для проверки подлинности в Формах, будет использоваться каждый раз при использовании запроса инициализации страницы на веб-сайт? Если это не одно и то же время (например, каждый раз, когда используется случайное значение), я думаю, что все в порядке. – George2

+1

Идентификатор сеанса - это идентификатор сеанса, а не для пользователя. Когда вы открываете браузер и переходите на сайт, вы каждый раз получаете новый сеанс. Сеанс работает на сервере в течение 20 минут (по умолчанию) после вашего последнего запроса, после чего идентификатор сеанса больше недействителен, и вы получаете новый сеанс при переходе на сайт. – Guffa

+0

1. Моя забота заключается в том, что законный пользователь A открывает браузер, а пользователю назначается идентификатор сеанса A сервером. В то же время и в течение 20 минут, если хакер посередине отключил идентификатор сеанса A, хакер мог использовать это значение, чтобы притворяться пользователем A. Итак, это риск безопасности? 2. Можете ли вы подтвердить каждый раз (после аутентификации сервером с использованием проверки подлинности с помощью форм) при отправке запроса на сервер, будет перенесено значение переменной сеанса аутентификации? – George2

3

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

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

+0

Спасибо, blowwart, cookie для проверки подлинности. Я думаю, вы имеете в виду «.ASPXAUTH» session cookie? Что означает «идентификатор сеанса пользователя»? – George2

+0

Фактически в этом обсуждении, когда я говорю переменную сеанса аутентификации, я имею в виду «.ASPXAUTH». Любые комментарии? – George2

+3

Почему вы думаете, что это переменная? Сессионный файл cookie, содержащий идентификатор сеанса, называется asp.net_sessionid (хотя вы можете его изменить). Он не содержит ничего, кроме указателя - в нем не содержатся переменные сеанса. Формы auth cookie более сложны (и подписаны против фальсификации). Компромисс идентификатора сеанса не аутентифицирует пользователя, но – blowdart

0

Да! Просто убедитесь, что добавить: RequireSSL = «истина» на вашем web.config формы тег

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" requireSSL="true" /> 
    </authentication> 

Затем вы можете также использовать некоторые переписывают, чтобы убедиться, что протокол HTTPS используется на страницах или каталогов, которые требуют authenntication. В MVC вы можете использовать атрибут фильтра [RequireHttps].

 <rewriteMap name="SSL_Required_pages" defaultValue=""> 
     <add key="/simulacao-seguro-automovel.aspx" value="/simulacao-seguro-automovel.aspx" /> 
     </rewriteMap> 
     <rule name="Enforce SSL pages"> 
     <match url="(.*)" /> 
     <conditions> 
      <add input="{SSL_Required_pages:{HTTP_URL}}" pattern="(.+)" /> 
      <add input="{HTTPS}" pattern="off" /> 
      <add input="{HTTP_HOST}" pattern="mysite\.com" /> 
     </conditions> 
     <action type="Redirect" url="https://mysite.com/{R:1}" redirectType="Permanent" /> 
     </rule> 
     <rule name="Enforce SSL to secure directories"> 
     <match url="(.*)" /> 
     <conditions> 
      <add input="{PATH_INFO}" pattern="^/admin/|^/admin|^/fale-conosco/|^/fale-conosco" /> 
      <add input="{HTTPS}" pattern="off" /> 
      <add input="{HTTP_HOST}" pattern="mysite\.com" /> 
     </conditions> 
     <action type="Redirect" url="https://www.mysite.com/{R:1}" redirectType="Permanent" /> 
     </rule> 
Смежные вопросы