PHP wielokrotny redirect

0

Hej,
mam pytanko, mam skrypt który sprawdza dostep do obiektu, jesli go brak to robi redirect do wczesniejszej strony z HTTP_REFERERA
Nie wchodzac w szczegoly moze sie zdarzyc ze na tej stronie po redirect tez nie bedize dostepu i powstanie petla przekierowan.
Chcialem sie przed tym zabezpieczyc i np. sprawdzac ktory to redirect, i po np. 3 przekierowac na strone glowna gdzie na pewno wszystko jest ok.

Macie pomysl jak to ogarnac. Myslalem moze zeby do tej wartosci z HTTP_REFERERA dokleic parametr redirect_count i sprawdzac jego wartosc, jesli jest wiekszy od jakiejs tam wartosci t ozrobic redirect na strone glowna.

Jakies inne pomysly?

0

No to tak średnio widzę to rozwiązanie. Jak użytkownik może dokonać tego, ze trafia na obiekt do którego nie ma dostępu?
Skoro nie ma dostępu to powinien dostać informację o tym że "Brak dostępu" z kodem 403 i tyle. A robienie redirectów tylko nadwyręży Ci aplikacje. Czemu nie możesz sprawdzać tego za jednym razem? Czemu użytkownik może wyklikać (tak zakładam) coś do czego nie ma dostępu? No chyba że wpisuje url z palca - wtedy wystarczy to co napisalem wyzej

Kolejna rzecz - skoro ze strony A przechodzi na stronę B, do której nie ma dostępu, a następnie jest przekierowany na stronę C (też nie ma dostępu) to czemu ze strony C ma być przekierowany na B lub inną stronę do której nie ma dostępu? Jeśli masz tak w aplikacji to wg mnie coś jest nie halo.

Co do Twojego rozwiązania - a co jeśli nie będzie HTTP_REFERERA albo będzie zawierał zupełnie inne dane? Zakładam że user może równoległe zalogować się na dwóch przeglądarkach, w pierwszej dojść do kroku gdzie straci dostęp, lecz uprzednio skopiuje link - i wklei go do drugiej przeglądarki - wtedy te rozwiązanie z referem traci totalnie sens.

Opisz lepiej przykład sytuacji gdzie to następuję i dlaczego tak się dzieje - to może coś poradzę.

0

Wyobraz sobie sytuacje, mamy dwa budynki A i B.
Budynek A ma pomieszczenia od 1-100, budynek B od 101-200.
Można pracować tylko na jednym budynku, co to znaczy? To znaczy, że w sesji jest informacja "Teraz aktywny jest budynek A" i gdy ktoś wykonuje jakąś operacje to zawsze robi to na budynku A.
Na każdej stronie dostępny jest select z wyborem budynku, pomiedzy A i B.
Jesteś na liście pomieszczeń np. "/building/rooms". Zmieniasz selectem z aktywnego budynku A na aktywny budynek B co powoduje odpalenie akcji np. /building/set-active/B. Ta akcja ustawia w sesji aktywny budynek B i następuje powrót back czyli do "building/rooms", jest cacy.
Gdy natomiast jesteś w karcie pomieszczenia np. o numerze 57 czyli "/building/room/57" i zmienisz na budynek B, to w budynku B pomieszczenie 57 nie istnieje, dostajesz deny który robi back. Powstaje wtedy pętla backów ;), i tyle. Chciałbym ją przerwać. Jak widzisz nie jest do jakieś "hackowanie" całości, ale tak po prostu może być.

0

Twoi opis coś już rozjaśnia, ale i tak da się to ogarnąć jedna walidacja uprawnień i jednym redirectem.
Jeśli robie zmianę z a na b to przy zmianie sprawdzam czy mam uprawnienia do b, jeśli był podany numer pokoju to sprawdzam od razu czy mam dostęp jeśli nie to trafiam z powrotem do A. Nie widzę tu możliwości zrobienia pętli przekierowan. Taka pętla byłaby możliwa gdybyś robił redirect z A do B i z B do A jednocześnie. W Twoim przypadku nie wiem nadal gdzie może taka pętla powstać. Bardziej bym obstawial że masz zrobiony jakiś autorski routing ew. źle mapujesz ścieżki

0

To co się dzieje,

Jestem
/building/room/57

ustawiam aktywny
/building/set-active/B

return back do
/building/room/57 brak uprawnień, jest deny i back
do: /building/set-active/B
return back do
/building/room/57 brak uprawnień, jest deny i back

i tutaj powstaje właśnie ta pętla pomiędzy set-active i room/57

natomiast teraz pomyślałem, że robiąc set-active moge sprawdzić czy przypadkiem nie jest już ustawiony B, jeśli tak to w takiej sytuacji zrobić redirect do strony głownej.

Chyba pyknie ;)

thx

0

W opisanej sytuacji sprawdzaj od razu w trakcie zmiany czy user ma dostęp do B i danego pokoju i rób jednego redirecta. Tyle powinno wystarczyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1