Небезопасная отправка обратно из элемента управления asp.net на защищенную страницу, избегая при этом аутентификации - PullRequest
3 голосов
/ 14 октября 2008

Мы используем стандартную аутентификацию asp.net форм. Некоторые страницы требуют, чтобы пользователь вошел в систему; и, по крайней мере, некоторые из этих страниц доставляются по https. В верхней части каждой страницы есть элемент управления поиском. Когда это используется, нам все равно, истек ли сеанс пользователя, даже если текущая страница требует входа в систему.

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

Каков наилучший способ обойти охрану здесь? Я рассмотрел возможность публикации на другой странице с помощью свойства PostBackUrl, но если это не https, вы получите сообщение «вы отправляете данные в незащищенное соединение», которое пользователям не нравится.

Спасибо за любую помощь.

Редактировать: спасибо Нику за предложение использовать GET на странице поиска. Мы уже делаем это, но строка запроса создается элементом управления вводом поиска, а затем перенаправляет. Как мы можем создать строку запроса без использования обратной передачи? (Очевидно, что javascript - это вариант, но я надеялся найти альтернативный механизм.)

Ответы [ 3 ]

2 голосов
/ 14 октября 2008

Для страницы поиска вы хотите убедиться, что поиск происходит с помощью запроса GET. (например, как Google с «q» в строке запроса) Скорее всего, вы делаете POST.

Так что поменяйте

<form method="post" ...>

до

<form method="get" ...>

Самая большая ошибка, которую большинство разработчиков допускают при поиске страниц, заключается в создании обратной записи. HTTP был разработан для выполнения запросов или поиска по строке запроса (таким образом, по имени) и для получения формы для отправки в строку запроса вместо тела, вам необходимо использовать метод «GET». Таким образом, любое поисковое устройство может использовать вашу поисковую страницу, даже окно поиска в браузерах.

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

<location path="my-search-page.aspx">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

Это создает специальное переопределение для этой одной страницы, и все внутри тега location использует ту же самую структуру web.config для переопределения web.config.

Вы захотите повторить это для каждой страницы, которую хотите разрешить всем пользователям.

1 голос
/ 14 октября 2008

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

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

Есть несколько способов обойти это, сделать поиск нормальной HTML-формой и заставить ее выполнять GET, а не POST и упоминается "Nick"

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

На этом сайте есть хорошая статья на странице, такая как цикл и ее переопределения. http://www.15seconds.com/issue/020102.htm

0 голосов
/ 17 октября 2008

Как предлагается в других ответах, наиболее правильный способ сделать это - иметь элемент управления поисковым вводом в отдельной форме, который имеет метод get и действие searchresults.aspx. Однако с aspx это сложно, так как на странице может быть только одна серверная форма.

В конце концов, решение, к которому я пришел, которое работает очень хорошо, заключалось в том, чтобы иметь HttpModule, который определял, была ли нажата кнопка «поиск» (проверяя, существует ли параметр с его идентификатором), затем создавал Строка запроса путем поиска параметров критериев и перенаправлены на страницу результатов поиска. Это означает, что все модули аутентификации / авторизации обойдены, так как мы уже вызвали перенаправление на (незащищенную) страницу результатов поиска до их запуска.

Это немного хрупко, но для нас это работает очень хорошо.

...