Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Bezpieczne przekierowanie
Forum PHP.pl > Forum > Przedszkole
JamalBIG
Witam

W jaki sposób mogę w bezpieczny sposób przekierować użytkownika na określony w zmiennej GET adres podstrony np. użytkownik przegląda artykuł i aby dodać komentarz musi się zalogować więc skrypt po kliknięciu 'dodaj komentarz' rozpoznaje niezalogowanie i przekierowuje do formularza logowania - po poprawnym zalogowaniu chciał bym aby użytkownik wrócił na stronę artykułu aby móc wpisać komentarz - i tu pojawia się zagłostka - jak przesłać adres docelowy po zalogowaniu? W GET, SESSION, POST a może w zupełnie inny sposób?

Pozdrawiam
KsaR
Po kliknieciu 'dodaj komentarz' sprawdz czy zalogowany,
Jak nie to dodaj do sesji ten url i przekieruj na logowanie.
  1. session_start(); # jeśli nie masz...
  2. ob_start(); # buforowanie.. M.in nagłówków
  3.  
  4. if (!isset($_SESSION['logged']))
  5. {
  6. $_SESSION['redirect']=$_GET['adresPodstorny']; # lub inną zmienną.
  7. header('refresh:5;url=login.php');
  8. exit ('Przed dodaniem komentarza musisz się zalogować, za 5s zostaniesz przekierowany. Jeśli nie, kliknij <a href="login.php">tutaj</a>.');
  9. }

Przy logowaniu mozesz dodac sprawdzanie czy istnieje np.

  1. if (isset($_SESSION['redirect']))
  2. {
  3. header('Location:'.$_SESSION['redirect']);
  4. unset($_SESSION['redirect']);
  5. }

Ps. Pisane skrypty z pamięci, żebyś miał zarys.
JamalBIG
A jak można to dodatkowo zabezpieczyć aby za pomocą GET ktoś nie wysłał złego linku? Czy przepuszczenie zmiennej przez filtry przeciw najpopularniejszymi atakami wystarczy?
KsaR
Zakladając że chcesz przekierowac na ta sama strone gdzie kliknales "dodaj komentarz",
Mozesz uzyc jakiejs zmiennej serverowej np.

  1. $_SESSION['redirect']=$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];

i to zapisywac zamiast tamtego $_GET..
A jak na inna to zapisuj samo $_SERVER['SERVER_NAME'] wraz z tamtym z get, co by np. Poza strone nie przekierowal.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.