Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]$GLOBALS a zmienne prywatne klas.
Kużdo
post 28.04.2012, 17:45:49
Post #1





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
nospor
post 28.04.2012, 19:08:28
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A od kiedy zmiennej prywatne klasy znajdują sie w tablicy GLOBALS?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kużdo
post 28.04.2012, 19:32:41
Post #3





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Kużdo 28.04.2012, 19:44:48
Go to the top of the page
+Quote Post
nospor
post 28.04.2012, 19:45:08
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kużdo
post 28.04.2012, 19:51:23
Post #5





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post 28.04.2012, 19:55:51
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kużdo
post 28.04.2012, 20:26:25
Post #7





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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ź.
Go to the top of the page
+Quote Post
Fifi209
post 28.04.2012, 20:29:55
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


A mógłbyś pokazać kod PHP? smile.gif


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
nospor
post 28.04.2012, 20:38:34
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kużdo
post 28.04.2012, 20:40:15
Post #10





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


@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);


Ten post edytował Kużdo 28.04.2012, 20:42:54
Go to the top of the page
+Quote Post
Fifi209
post 28.04.2012, 20:43:36
Post #11





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


I potem robisz:
  1. print_r($GLOBALS);


i ją widzisz tak?

Ten post edytował Fifi209 28.04.2012, 21:34:07


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Kużdo
post 28.04.2012, 20:45:16
Post #12





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


Wysłałeś posta 2 razy wink.gif I tak, chodzi o ten drugi sposób, bo nie ma $_GLOBALS.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 05:19