Небезопасная обратная публикация из элемента управления asp.net на защищенной странице без аутентификации.

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

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Решение 3

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

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

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

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

Для страницы поиска вы хотите убедиться, что поиск происходит с помощью запроса 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>

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

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

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

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

Есть несколько способов обойти это: сделать поиск обычной HTML-формой и заставить его выполнять GET, а не POST и упомянуто «Ником».

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

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

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