asp.net используйте требования и все еще иметь возможность проверить, аутентифицируется ли пользователь на страницах без SSL

StackOverflow https://stackoverflow.com/questions/4546682

Вопрос

У меня есть WebPplication (ASP.NET 3.5) со смешанным SSL. Все страницы, связанные с учетом, доставляются по SSL. В основном все остальные страницы доставляются по не-SSL. Для автоматического переключения между HTTPS и HTTP я использую этот компонент. Анкет В последнее время появилась новость, касающаяся способности Toch Hajach Users Sessions в небезопасных сетях Wi-Fi. Это должно быть возможно, поймав файл cookie, который передается по не-SSL-соединениям.

Это заставило меня просмотреть свой выбор безопасности в этом веб -приложении. Я (снова) схватил эта статья от MSDN и попробовал Требование = верно Собственность на моих формах подтверждения. Еще до того, как я начал веб-привязку, я понял, что мой пользователь. Идентификация будет нулевой на страницах без SSL, потому что файл cookie, содержащий эту информацию, не отправляется из веб-бруззера.

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

Во время поиска так я нашел эта почта. Анкет Мне кажется, что это хорошее решение. Но мне интересно, можно ли найти решение при хранении информации о входе в систему в сеансе штата? Я подумываю поймать Application_authenticateRequest в Global.asax. Проверьте, безопасно ли соединение, и проверьте либо Authcookie, либо сеанс. Я пока не знаю, как я собираюсь это реализовать. Может, вы можете подумать со мной об этом?

Это было полезно?

Решение

К сожалению, у вас есть противоречивые требования. Вы не можете провести безопасную сессию по не-SSL, поэтому я хотел бы оспорить ваше основное предположение: почему бы не использовать весь сайт SSL?

Другие советы

Из FAQ MVC (аналогичный вопрос, отвечающий гуру безопасности Леви) с просьбой атрибут не использовать SSL.

• Атрибут [requireHTTPS] может использоваться в методе типа контроллера или действия, чтобы сказать «это можно получить только через SSL». Запросы без SSL на контроллер или действие будут перенаправлены на версию SSL (если HTTP Get) или отклонен (если HTTP-пост). Вы можете переопределить requirehttpsattribute и изменить это поведение, если хотите. Не существует встроенного атрибута [TearHTTP], который делает наоборот, но вы можете легко сделать свой собственный, если хотите.

Существуют также перегрузки html.actionlink (), которые принимают параметр протокола; Вы можете явно указать «http» или «https» в качестве протокола. Вот документация MSDN на одной такой перегрузке. Если вы не указываете протокол или если вы называете перегрузку, у которой нет параметра протокола, предполагается, что вы хотите, чтобы ссылка имела тот же протокол, что и текущий запрос.

Причина, по которой у нас нет атрибута [requireHTTP] в MVC, заключается в том, что для этого не очень большая польза. Это не так интересно, как [требуется], и побуждает пользователей делать неправильные вещи. Например, многие веб -сайты входят через SSL и перенаправляют обратно в HTTP после того, как вы вошли в систему, что абсолютно неправильно. Ваш файл cookie для входа в систему столь же секрет, как и ваше имя пользователя + пароль, и теперь вы отправляете его в Clarext Telect через проволоку. Кроме того, вы уже нашли время, чтобы выполнить рукопожатие и закрепить канал (который является основной частью того, что делает HTTPS более медленнее, чем HTTP) до запуска трубопровода MVC, поэтому [requireHTTP] не будет выполнять текущий запрос или будущее просит намного быстрее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top