Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][inne]Zabezpieczenie przed zmianą zmiennej GET w adresie URL
Forum PHP.pl > Forum > Przedszkole
odkuszacz
Witam,
produkuję serwis, w którym będą między innymi prezentowane artykuły użytkowników.
Jedną z podstawowych funkcjonalności będzie możliwość edycji artykułu. Tyle wprowadzenia - teraz do celu.
Po zalogowaniu na swój profil i wyborze edycji artykułu mam adres np.: http://www.jakasnazwa.pl/edycja_artykulu.php?idart=45678.
Użytkownik może w pasku adresu przeglądarki zmienić idart i z dużym prawdopodobieństwem wpisać wartość odpowiadającą już zapisanemu w bazie artykułowi innego użytkownika i wtedy może go pozmieniać. Czy moglibyście podpowiedzieć jak to zabezpieczyć?

Za pomoc przedszkolakowi z góry wielkie dzięki smile.gif
phpion
Po pobraniu artykułu z bazy sprawdź czy jego autor to aktualnie zalogowana osoba. Jeśli nie to zrób co uważasz (np. die('giń!')). Tyle.

Innym rozwiązaniem jest dodanie drugiego warunku do samego zapytania czyli WHERE id_artykulu = 45678 AND id_autora = X gdzie X to identyfikator aktualnie zalogowanego użytkownika.
thek
Ja najczęściej robię tak:
1) User ma prawa admina/moda -> zapytanie jest z WHERE id = id_artykulu
2) user to szarak: -> zapytanie jest z WHERE id = id_artykulu AND owner_id = id_usera (najczęściej z sesji)
Zawsze to ciutkę mniej rzeczy do przesłania między bazą i skryptem.
Magic WWW
Dodam, żeby dodać w PHP sprawdzanie czy idart jest liczbą smile.gif

  1. if(!is_numeric($_GET['idart']))
  2. {
  3. exit('Error');
  4. }
thek
Ja zazwyczaj mam bardziej rozbudowane...
  1. if( isset( $_GET['idart'] ) && ctype_digit( $_GET['idart'] ) && $_GET['idart'] > 0 )

lub zamiast isset daję
  1. array_key_exists( 'idart', $_GET )
odkuszacz
Dzięki wielkie za pomoc. Działa biggrin.gif
mat-bi
A nie łatwiej przeprowadzić rzutowanie?
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.