Invio non sicuro da un controllo asp.net su una pagina sicura evitando l'autenticazione

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

  •  03-07-2019
  •  | 
  •  

Domanda

Stiamo usando l'autenticazione standard dei moduli asp.net. Alcune pagine richiedono che un utente abbia effettuato l'accesso; e almeno alcune di queste pagine sono fornite da https. C'è un controllo di ricerca nella parte superiore di ogni pagina. Quando viene utilizzato, non ci importa se la sessione dell'utente è scaduta, anche se la pagina corrente richiede un accesso.

Tuttavia, attualmente, quando si esegue la ricerca, l'autenticazione basata su moduli incorporati rileva che la pagina in cui è pubblicata richiede l'autenticazione e reindirizza l'utente alla pagina di accesso, con la pagina precedente, non la pagina dei risultati di ricerca come referrer.

Qual è il modo migliore per aggirare la sicurezza qui? Ho preso in considerazione la possibilità di pubblicare su una pagina diversa utilizzando la proprietà PostBackUrl, ma se questo non è https si ottiene la "quotazione dei dati su una connessione non sicura" messaggio, che non piace agli utenti.

Grazie per l'aiuto.

Modifica: grazie Nick per il tuo suggerimento di usare GET nella pagina di ricerca. Lo stiamo già facendo, ma la stringa di query viene creata dal controllo di input della ricerca, quindi reindirizza. Come possiamo creare la stringa di query senza usare un postback? (Ovviamente javascript è un'opzione ma speravo di trovare un meccanismo alternativo.)

È stato utile?

Soluzione 3

Come suggerito in altre risposte, il modo più corretto per farlo sarebbe quello di avere il controllo dell'input di ricerca in una forma separata che ha un metodo di get e un'azione di searchresults.aspx. Tuttavia, questo è difficile con aspx in quanto è possibile avere un solo modulo lato server su una pagina.

Alla fine la soluzione a cui sono arrivato, che funziona molto bene, è stata quella di avere un HttpModule individuato se "cerca" era stato fatto clic sul pulsante (cercando di vedere se esisteva un parametro con il suo ID), quindi aveva creato una stringa di query cercando i parametri dei parametri e reindirizzato alla pagina dei risultati della ricerca. Ciò significa che tutti i moduli di autenticazione / autorizzazione vengono ignorati poiché abbiamo già chiamato un reindirizzamento alla pagina dei risultati della ricerca (non protetta) prima che vengano attivati.

È leggermente fragile ma per noi funziona molto bene.

Altri suggerimenti

Per la pagina di ricerca si desidera assicurarsi che la ricerca avvenga tramite una richiesta GET. (ad es. come google con la stringa "quot" nella stringa della query) è probabile che tu stia eseguendo un POST.

Quindi cambia il tuo

<form method="post" ...>

a

<form method="get" ...>

L'errore più grande che la maggior parte degli sviluppatori fa con le pagine di ricerca è di postare un post. HTTP è stato progettato per eseguire query o ricerche tramite la stringa di query (da cui il nome) e per ottenere un modulo da pubblicare in una stringa di query anziché nel corpo è necessario utilizzare un " GET " metodo. In questo modo qualsiasi dispositivo di ricerca può utilizzare la tua pagina di ricerca, anche la casella di ricerca del browser.

Secondo, vuoi creare una local config per te pagina di ricerca. Lo aggiungi al tuo web.config.

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

Questo crea uno speciale override per quella pagina e tutto all'interno del tag location usa la stessa identica struttura web.config per sovrascrivere web.config.

Dovrai ripetere questo per ogni pagina che vuoi consentire a tutti gli utenti.

Se la pagina dei risultati di ricerca sta eseguendo un postback, l'evento pageload verrà generato prima che si faccia clic sul pulsante di ricerca.

Quindi, se la pagina in cui si trovano richiede un login, quel comando di login verrà eseguito prima del pulsante di ricerca, fare clic su evento per rimandarli alla schermata di login.

Esistono diversi modi per rendere la ricerca un normale modulo html e renderlo un GET non un POST e menzionato da " Nick "

Ort se l'intera pagina è all'interno di un modulo di postback .net, dovrai aggiungere l'evento del pulsante di ricerca a un sovraccarico del caricamento della pagina in modo che venga attivato per primo.

Questo sito ha un buon articolo sulla pagina come ciclo e sue sostituzioni. http://www.15seconds.com/issue/020102.htm

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top