2011-12-29 12 views
7

page1.php:Czy użytkownik może zmodyfikować sesję PHP?

<?php 
session_start(); 
if ($_POST['password'] == "testpass") 
$_SESSION['authenticated'] = true; 
?>

page2.php

<?php 
session_start(); 
if (isset($_SESSION['authenticated']) && $_SESSION['authenticated'] == true) { 
echo "Super secret stuff!"; 
} 
?>

Czy użytkownik może dostać się bez super bezpieczne hasło?

+1

Użytkownik nie może modyfikować sesje PHP na serwerze. Mogą jedynie wymyślić legalne ciasteczko i maskować się jako zalogowany użytkownik, ale to będzie wymagało od nich kradzieży ważnego pliku cookie. – AbdullahC

+1

Nie musisz sprawdzać swojej zmiennej względem wartości true w teście, ale porównując wartości binarne, lepiej jest użyć identycznego porównania. $ test === true. Staraj się być surowym, gdy tylko jest to możliwe. – MetalFrog

+0

@MetalFrog Wiem, ale jeśli to nie było uwierzytelnienie (tylko benchmark w tym przypadku) użyłbym ==, ponieważ mogę również podać "true" lub 1 lub "1" – BronzeByte

Odpowiedz

13

Nr dane w Zmienna $ _SESSION jest przechowywana na serwerze, niedostępna dla użytkownika.

Sesja jest połączona z użytkownikiem za pomocą pliku cookie. Plik cookie z identyfikatorem (tj. Długim losowym ciągiem znaków) jest wysyłany do użytkownika w celu identyfikacji użytkownika i połączenia go z jego sesją. Jeśli ktoś inny uzyska dostęp do tego pliku cookie, może użyć tego samego kodu, aby udawać, że jest użytkownikiem, i w ten sposób może uzyskać dostęp bez hasła.

+2

Dzięki za potwierdzenie, że dostarczając więcej informacji :) – BronzeByte

+0

pytanie brzmiało "Czy użytkownik może się dostać bez super bezpiecznego hasła?", A odpowiedź brzmi TAK. –

+1

@PoelincaDorin - Myślę, że każdy, kto ma trochę soli w głowie, może zobaczyć, na czym polega problem i jaka jest właściwa odpowiedź. Twój nie jest. Ten jest. –

1

Sesja może zostać zmodyfikowany wyłącznie z kodu PHP, to w przeciwieństwie do $_POST, $_GET, $_COOKIE etc

Tak na marginesie myślę, że można użyć empty() uprościć Warunkowo:

<?php 
session_start(); 
if (!empty($_SESSION['authenticated']) { 
    echo "Super secret stuff!"; 
} 
?> 
+0

To był tylko wzorzec;) – BronzeByte

1

sesji może być modyfikowany na różne okazje .. Zobacz to ->Session Poisoning

+0

+50! zaskoczony brak głosowania .. jakieś zaktualizowane informacje? Czy możesz zarejestrować odpowiedź QA? – wpcoder

Powiązane problemy