Neasigurarea postării înapoi de pe un control asp.net pe o pagină securizată, evitând în același timp autentificarea

Folosim autentificarea formularului asp.net standard. Anumite pagini necesită conectarea unui utilizator; și cel puțin unele dintre aceste pagini sunt livrate de https. Există un control de căutare în partea de sus a fiecărei pagini. Atunci când se utilizează acest lucru, nu ne pasă dacă sesiunea utilizatorului a expirat, chiar dacă pagina curentă necesită logare.

Cu toate acestea, în momentul efectuării căutării, autentificarea formularelor încorporate văd că pagina care este trimisă necesită autentificare și redirecționează utilizatorul la pagina de conectare, cu pagina anterioară, nu pagina cu rezultatele căutării ca referință.

Care este cel mai bun mod de ocolire a securității aici? Am considerat postarea pe o altă pagină utilizând proprietatea PostBackUrl, dar dacă nu este https, primiți mesajul "trimiteți date către o conexiune nesigură", pe care utilizatorii nu le plac.

Multumesc pentru orice ajutor.

Editați: mulțumim Nick pentru sugestia dvs. de a utiliza un GET pe pagina de căutare. Facem acest lucru deja, dar șirul de interogare este construit de controlul de intrare al căutării, apoi redirecționează. Cum putem construi șirul de interogări fără a folosi un postback? (Evident, JavaScript este o opțiune, dar speram să găsim un mecanism alternativ.)

3

3 răspunsuri

Pentru pagina de căutare pe care doriți să vă asigurați că căutarea se desfășoară printr-o solicitare GET. (adică ca Google cu "q" în șirul de interogare) Este posibil să faceți un POST.

Deci schimba-ți

<form method="post" ...>

la

<form method="get" ...>

The biggest mistake most developers make with search pages is lado a post back. HTTP was designed lado queries or searches through the query string (thus the name), and laget a form lapost laa query string instead of the body you need lause a "GET" method. This way any search device can use your search page, even the browsers search box.

Second you want lacreate a special location config for you search page. You add this layour web.config.


    
        
            
        
    

This creates a special override for that one page and everything inside the location tag uses the exact same web.config structure laoverride the web.config.

You will want larepeat this for each page you want laallow all users to.

2
adăugat

Dacă pagina cu rezultatele căutării efectuează un mesaj postback, evenimentul pagload va fi concediat înainte de apăsarea butonului de căutare.

Deci, în cazul în care pagina pe care au pornit este necesar un login care comanda de conectare va fi rulat înainte de butonul de căutare faceți clic pe eveniment le trimite înapoi la ecranul de conectare.

Există câteva moduri prin care acest lucru face căutarea unui formular html normal și face ca acesta să nu fie un POST și să fie menționat de "Nick"

Ort dacă întreaga pagină se află într-un formular .net postback, va trebui să adăugați evenimentul butonului de căutare la o suprasarcină a încărcării paginii, astfel încât aceasta să apară mai întâi.

This site has a good article on the page like cycle and its overrides. http://www.15seconds.com/issue/020102.htm

1
adăugat

Așa cum am sugerat în alte răspunsuri, cel mai corect mod de a face acest lucru ar fi acela de a avea controlul intrării de căutare într-o formă separată, care are o metodă de obținere și o acțiune a searchresults.aspx. Cu toate acestea, acest lucru este dificil cu aspx, deoarece puteți avea o singură formă de server pe o pagină.

În cele din urmă, soluția la care am ajuns, care funcționează foarte bine, a fost să aibă un HttpModule care a văzut dacă butonul "căutare" a fost apăsat (căutând să vadă dacă există un param cu idul său), apoi a construit un șir de interogare căutând parametrii de criterii și redirecționați către pagina cu rezultatele căutării. Aceasta înseamnă că toate modulele de autentificare/autorizare sunt ocolite, deoarece am apelat deja o redirecționare către pagina cu rezultatele căutării (negarantate) înainte de a fi declanșate.

Este ușor fragilă, dar pentru noi funcționează foarte bine.

0
adăugat