postagem de volta não segura a partir de um controle asp.net em uma página segura, evitando a autenticação

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Estamos usando autenticação de formulários ASP.NET padrão. Algumas páginas requerem um usuário que estar conectado; e menos algumas destas páginas são entregues por https. Há um controle de pesquisa no topo de cada página. Quando isso é usado, não importa se a sessão do usuário expirou, mesmo se a página atual exige um login.

No entanto, atualmente, ao realizar a pesquisa, o built-in de autenticação de formulários vê que a página que está sendo enviada para exigir autenticação e redireciona o usuário para a página de login, com a página anterior, não a página de resultados de pesquisa como a referência.

O que é a melhor maneira de contornar a segurança aqui? Tenho considerado postagem para uma página diferente usando a propriedade PostBackUrl, mas se isso não for https você obter o "você está postando dados para uma ligação não segura" mensagem, que os usuários não gostam.

Obrigado por qualquer ajuda.

Edit: graças Nick por sua sugestão de usar um GET na página de pesquisa. Estamos fazendo isso já, mas a string de consulta é construída pelo controle de entrada de pesquisa, em seguida, redirecionamentos. Como podemos construir a string de consulta sem usar um postback? (Obviamente javascript é uma opção, mas eu estava esperando encontrar um mecanismo alternativo.)

Foi útil?

Solução 3

Como sugerido em outras respostas a maneira mais correta de fazer isso seria a de ter o controle de entrada de pesquisa em um formulário separado que tem um método de get e uma ação de SearchResults.aspx. No entanto, isto é difícil com aspx como você pode ter apenas uma forma do lado do servidor em uma página.

No final, a solução que eu vim para, que funciona muito bem, era ter um HttpModule que viu se o botão "Pesquisar" tinha sido clicado (olhando para ver se um param com seu id existiu), então, construiu-se um string de consulta por olhar para os params critérios e redirecionado para a página de resultados de pesquisa. Isto significa que todos os módulos de autenticação / autorização são ignorados como já chamado de redirecionamento para o (unsecured) busca página de resultados antes que eles são acionados.

É um pouco frágil, mas para nós ele funciona muito bem.

Outras dicas

Para a página de pesquisa que você quer certificar-se a busca está acontecendo através de uma solicitação GET. (Ou seja, como o Google com o "q" na cadeia de consulta) Provavelmente, você está fazendo um POST.

Assim, mudar a sua

<form method="post" ...>

para

<form method="get" ...>

O maior erro que a maioria dos desenvolvedores fazer com páginas de pesquisa é fazer um post de volta. HTTP foi projetado para fazer consultas ou pesquisas através da string de consulta (daí o nome), e para obter um formulário para postar em um string de consulta em vez do corpo você precisa usar um método "GET". Desta forma, qualquer dispositivo de busca pode usar sua página de pesquisa caixa, procurar mesmo os navegadores.

Em segundo lugar você deseja criar um especial localização de configuração para você página de pesquisa. Você pode adicionar isto ao seu web.config.

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

Isso cria uma substituição especial para que uma página e tudo dentro da marca de localização utiliza exatamente a mesma estrutura web.config para substituir o web.config.

Você vai querer repetir isso para cada página que você deseja permitir que todos os usuários.

Se a página de resultados de pesquisa está realizando uma nova postagem o evento pageload será demitido antes de o botão de busca é clicado.

Então, se a página que estão no necessário um login que login comando será executado antes do evento botão de pesquisa clique enviá-los de volta para a tela de login.

Existem algumas maneiras de contornar este fazer a busca de um formulário HTML normal e fazer itperform um GET não um POST e mencionado por "Nick"

Ort se a página inteira estiver dentro de um formulário de postagem .net você precisará adicionar o evento botão de pesquisa para uma sobrecarga do carregamento da página para que ele dispara primeiro.

Este site tem um bom artigo sobre a página como ciclo e suas substituições. http://www.15seconds.com/issue/020102.htm

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top