Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]$GLOBALS a zmienne prywatne klas.
Forum PHP.pl > Forum > Przedszkole
Kużdo
Heyka,

Mam pytanko do osób, które znają odpowiedź ^^ Otóż, czy da się w jakiś sposób zabezpieczyć zmienne prywatne w klasach przed odczytem ich z tablicy $GLOBALS? Z góry dzięki za odpowiedź.

Pozdrawiam.
nospor
A od kiedy zmiennej prywatne klasy znajdują sie w tablicy GLOBALS?
Kużdo
Nie wiem od kiedy, ale tak jest wink.gif Sprawdzane na localhost i serwerze ;P

Dowód (wycinek z $GLOBALS):
Kod
[baza] => DB Object
    (
        [host:DB:private] => localhost
        [user:DB:private] => nazwa
        [pass:DB:private] => haslo
        [name:DB:private] => baza
        [port:DB:private] => 3306
        [prefix:DB:private] => prefix
        [connection] =>
        [error] =>
    )

connection i error to zmienne publiczne.
nospor
Jak to się nie znać a pisać...

W globals panie kolego to ty masz obiekt DB a nie zmienne prywatne. A print_r ma to do siebie że z obiektu wyświetla wszystko nawet zmienne prywatne.
Po pierwsze:z globals to nie ma żadnego związku
po drugie: spróbuj w takim razie coś tej zmiennej prywatnej przypisać wink.gif

Podsumowując: nie ma żadnego problemu.
Kużdo
Dobra, źle sformułowałem zdanie ;P Chodzi mi o to, aby właśnie nawet przez print_r nie dało sie wylistować tych zmiennych. Bo w ten sposób można dostać się do danych, których nie musimy chcieć udostępniać ludziom. A np. taki vb pozwala na wykonanie dowolnego kodu PHP, więc zakładając, że mam dostęp do czyjegoś panelu admina vb, mogę wylistować sobie login i hasło do bazy danych, właśnie dzięki $GLOBALS.
nospor
NIe dzięki GLOBALS tylko dzięki temu, że print_r wyświetla wszystko. Przyjmij to wkoncu do wiadomosci.

Nie da się. Masz dostęp do obiektu to dzieki print_r możesz podejrzeć jego zmienne prywatne.
Kużdo
Obyłoby się bez "przyjmij to wkoncu do wiadomosci". Potencjalny atakujący nie musi znać zmiennych w skrypcie, a $GLOBALS zna na 100%, co za tym idzie pisałem ciągle o $GLOBALS, bo dzięki tej tablicy dowiedziały się o danych, których każdy wolałby nie ujawniać.

Poza tym nie uzyskałem odpowiedzi na moje pytanie w Twojej poprzedniej wypowiedzi, więc nadal pytałem się o możliwość zabezpieczenia tego (na te pytanie dostałem dopiero teraz odpowiedź), więc nie rozumiem tej lekkiej bulewrsacji, jakobym nie zrozumiał czegoś z Twojego poprzedniego postu.

Tak czy siak, dzięki za odpowiedź.
Fifi209
A mógłbyś pokazać kod PHP? smile.gif
nospor
Cytat
Obyłoby się bez "przyjmij to wkoncu do wiadomosci"
Bo ci poraz kolejny wyjasniam ze to nie dzieki GLOBALS a dzięki print_r. Obyłoby się bez tych słów z mojej strony gdybyś przyjął to do wiadomosci za pierwszym razem smile.gif
Kużdo
@nospor, dzięki $GLOBALS uzyskamy dostęp do tych zmiennych, a nie dzięki znaniu nazwy konkretnego obiektu. To, że print_r tak działa zrozumiałem już przy pierwszym wyjaśnieniu, ale jakoś chyba musiałem dalej opisać sytuację?

@Fifi209, nie rozumiem do czego mógłby się przydać tutaj kod. Zwykła klasa, która zawiera kilka zmiennych prywatnych. Ustawia się je przy tworzeniu nowego obiektu. Nie da się zmienić, ani wylistować.

  1. class DB
  2. {
  3. private $host;
  4. private $user;
  5. private $pass;
  6. private $name;
  7. private $port;
  8. private $prefix;
  9.  
  10. public $connection;
  11. public $error;
  12.  
  13. public function __construct($host, $user, $pass, $name, $port, $prefix)
  14. {
  15. $this -> host = $host;
  16. $this -> user = $user;
  17. $this -> pass = $pass;
  18. $this -> name = $name;
  19. $this -> port = $port;
  20. $this -> prefix = $prefix;
  21. }
  22. /* Reszta metod do obslugi bazy */
  23. }
  24.  
  25. /* Kod z drugiego pliku php */
  26. $baza = new DB($dbhost, $dbuser, $dbpass, $dbname, $dbport, $dbprefix);
Fifi209
I potem robisz:
  1. print_r($GLOBALS);


i ją widzisz tak?
Kużdo
Wysłałeś posta 2 razy wink.gif I tak, chodzi o ten drugi sposób, bo nie ma $_GLOBALS.
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.