Temat: Niebezpieczeństwo zmiennej sesyjnej.
Adam Pietrasiewicz:
Jako początkujący nie mogę się połapać jeszcze w wielu kwestiach, między innymi w tym, jak to jest z tymi zmiennymi globalnymi i niebezpieczeństwem ich stosowania.
bardzo dawno nie uzywalem globalnych, bo zasadniczo w praktyce unika sie ich stosowania, ze wzgledu na balagan, ktory generuje ich naduzywanie
w programowaniu obiektowym zasadniczo hermetyzuje sie kod, wiec stosowanie zm. globalnych przeczy tej zasadzie
jesli chodzi o bezp. to musisz weryfikowac wartosc tych zm. i czy odp. Twoim zalozeniom, bo zakladasz, ze nie wiesz skad przyszly, wazna jest tez ich inicjalizacja
jak mowilem, dawno nie uzywalem wiec moglem cos pominac lub wyolbrzymic .. ale raczej jest jak pisze
Czy to odnosi się do wszystkich zmiennych których zasięg jest większy niż aktualnie wykonywany skrypt?
nie ma zmiennych o zasiegu wiekszym niz aktualnie wykonywany skrypt (nawet jesli ladujesz podskrypty, nadal jestes w skrypcie w ktorym zaczales, mozesz jedynie zaglebiac sie w funkcje, klasy, obiekty i metody przez co Twoj zasieg lokalny sie zmienia)
zm. moze byc lokalna, moze byc wlasciwoscia klasy lub obiektu (publiczna, chroniona, prywatna), moze byc parametrem itd, z zalozenia, wszystkie zm. maja jakis zasieg w ktorym sa w ten czy inny sposob dostepne
zm. globalna jest dostepna w calym zasiegu, oczywiscie jesli zaznaczysz, ze to jest globalna
Mam sobie maleńką aplikacyjkę, na trzech stronkach, w której mam zmienną $_SESSION['Nazwa'] i używam jej na dwóch stronkach z tych trzech. Na drugiej ją wypełniam, na trzeciej ją czytam.
To nie jest zm. globalna tylko zm. sesyjna. Znowu $_SESSION to jest zm. super globalna rozni sie tym od globalnej, ze zasadniczo nie musisz deklarowac jej jako globalnej, oraz ze jest jakas niewidoczna dla Ciebie warstwa, ktora inicjalizuje jej wartosci
Wszystko działa bardzo pięknie, ale nie wiem, czy nie powoduje to jakiegoś niebezpieczeństwa? Jeśli tak, to co należy zrobić, a jeśli nie, to CO w takim razie powoduje niebezpieczeństwo w tym kontekście zmiennych?
Niebezpieczenstwo w kontekscie zmiennych moze byc spowodowane inicjalizacja z zewnatrz danej zm. wartoscia niezamierzona/nizaplanowa przez Ciebie.
Czyli .. jesli jakas zm. moze byc ust. z zewnatrz to oznacza to ze powinienes ja validować/weryfikować.
Czy wartosc w tablicy $_SESSION moze byc ustawiona przez kogos innego ? Fakt ze jest inicjalizowana przez warstwe transparentna nie jest jeszcze dowodem, ze moze ja ustawic ktos z zewnatrz.
1. Ty ja inicjalizujesz
2. Jest chowana w tablicy sesji i skrypt umiera
3. Nowy skrypt sie uruchamia (nowa odslona)
5. Sesja jest podnoszona tablica sesji jest inicjalizowana danymi z poprzedniej sesji
6. Masz dostep do Twojej zmiennej w tablicy sesji
Cala wiedza jakiej potrzebujesz na poczatek:
http://pl.php.net/manual/en/
http://pl.php.net/manual/pl/
Bezpieczenstwo ogolnie:
http://www.owasp.org/ - Open Web Application Security Project