Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ochrona przed var_dump, print_r etc
Forum PHP.pl > Forum > PHP > Object-oriented programming
popsit
Witam,
mam dosc nietypowy problem, ktory wg php bugs wcale bledem nie jest iz php nie jest jezykiem zajmujacym sie bezpieczenstwem,
wiec klasy typu protected/private sa tylko blokowane przy dostepie z zewnatrz( z dziedziczony klas itp )...

W olbrzymim skrocie, w plikach xml sa zapisywane m.in dane do laczenie sie z SQL oram serverem memcache,
gdy wewnatrz klasy byle kto od tak zrobi sobie print_r / var_dump $this->nazwa_klasy widzi wszystkie zmienne bez wzgeldu na ustawione warunki odczytu ( public, private, protected ).

Czy macie moze jakies pomysly jak sie od tego uchronic?
Niestety predefiniowanych funkcji jak var_dump nie mozna od nowa zdeklarowac, wiec pierwsza opcja odpada.

Z gory dziekuje :)

Pozrawiam,
popsit
dr_bonzo
A przed kim chcesz to zabezpieczac? Bo nie rozumiem.

Skoro ktos ma dostep do plikow php zeby dodac tam var_dump to czemu nie ma dostepu do plikow XML ze musi az tak kombinowac?

I w jaki sposob zezwalasz "komus" na dodawanie tobie kodu php?
zbig
Witam !

Mniej wiecej rozumiem na czym polega twoj problem. Po prostu przy wiekszej liczbie osob pracujacych przy projekcie nie chcesz zeby kazdy mogl sobie odczytac dane polaczenia itp. Mozna temu zapobiec piszac klase oslonowa do twoich klas laczacych sie z baza danych a w projekcie uzywac jedynie mtod ktore zwracaja wyniki zapytan .

Ale php jest jezykiem o otwartym kodzie zrodlowym i nie bardzo wiem jak chcesz zapobiec mozliwosci robienia bedugow w tej klasie smile.gif

Jakims kulejacym rozwiazaniem jest system kontroli wersji ktory pozwala sciagnac programujacemu z repozytorium tylko czesc dla niego dostepna,
a testowac kod na serverze po dokononiu update . Ale dla mnie osobiscie to chory pomysl .

Po za tym przy pracy w grupie uzywa sie servera testowego a do serwera live pownien miec dostep tylko administrator i project manager wiec twoj problem jest dla mnie troche na wyrost.

A co do dostepu do zmiennych private, protected, public sprobuj w projekcie np. Javy uzyc debugera z z twojego IDE a zapewniam cie ze zobaczysz dokladnie to samo o czym piszesz w zwiazku z php

Pozdrawiam
erix
Pozostaje jeszcze prekompilowanie kodu źródłowego. Z darmowych, to chyba eAccelerator coś takiego umożliwia.
popsit
dr_bonzo: nieznanymi osobami poszacymi dodatkowe moduly. Nie wydaje mi sie bys chcial zeby ktos korzystal z twojego serwera memcache lub mial wglad do baz danych smile.gif

zbig: hej, no i wlasnie to jest dla mnie frustrujace. Myslalem ze itnieje jakas mozliwosc "ochrony", ale ze wszystkich zrodel na jakie trafilem otrzymuje nawet nie odpowiedz nie, tylko marzysz... chyba bede faktycznie musial utworzyc testarea w svn czy inna metoda, ale wszelkie rozszerzenia sprawdzac/instalowac osobiscie...


dziekuje wam za odpowiedzi smile.gif jakby mi sie udalo do czegos dojsc, podziele sie informacja na forum.

pozdrawiam,
popsit

Cytat(erix @ 28.05.2009, 12:06:10 ) *
Pozostaje jeszcze prekompilowanie kodu źródłowego. Z darmowych, to chyba eAccelerator coś takiego umożliwia.


tak, ale pozbycie sie debugowania wcale nie jest dobra sprawa. pozatym slyszalem iz "domowo" budowane zrodla czasami lubia dzialac inaczej niz pozadane.

ale jest to naprawde niezly pomysl, poszukam wiecej informacji na ten temat ( niewiem czy eAccelerator dziala z 5.3.0 ).

pozdrawiam
dr_bonzo
Nadal nie rozumiem twojego problemu.

Napisales jedynie ze nie chcesz aby print_r nie wypisywal prywatnych wlasciwosci.

Nie wiem co ty robisz, po co, czemu ci piszacy moduly nie moga miec swojej instancji aplikacji, SQL, memkesza.
Cytat
chyba bede faktycznie musial utworzyc testarea w svn czy inna metoda, ale wszelkie rozszerzenia sprawdzac/instalowac osobiscie...

a teraz kto je sprawdza? i jak N osob instaluje na raz i pisze modulu na jednej instancji aplikacji to tylko masz wieksza szanse ze to bedzie padac co chwile.

--
edit: a co da prekompilacja eAcc, jak i tak wezmiesz obiekt polaczenia, print_r i masz dane polaczenia - no chyba ze ich tam nie przechowujesz.
erix
Cytat
tak, ale pozbycie sie debugowania wcale nie jest dobra sprawa.

Ja nie mówię o kompletnym zakodowaniu kodu.

Ale zrób np. osobny plik sqlConnection.php, który będzie się ograniczał do zakodowania jednej jedynej linijki kodu:
  1. <?PHP
  2. Registry::set('db', new PDO('mysql:host=localhost', 'użyszkodnik', 'hasło'));
  3. ?>


edit:
Cytat
edit: a co da prekompilacja eAcc, jak i tak wezmiesz obiekt polaczenia, print_r i masz dane polaczenia - no chyba ze ich tam nie przechowujesz.

^^^
popsit
Ok, dziekuje za odpowiedzi temat uwazam za zamkniety. Dokonalem malej pprzerobki kodu bazy, by strony partnerskie nie mialy nic wspolnego z glownym systemem.

pozdrawiam,
popsit

Cytat(erix @ 28.05.2009, 12:27:51 ) *
Ja nie mówię o kompletnym zakodowaniu kodu.

Ale zrób np. osobny plik sqlConnection.php, który będzie się ograniczał do zakodowania jednej jedynej linijki kodu:
  1. <?PHP
  2. Registry::set('db', new PDO('mysql:host=localhost', 'użyszkodnik', 'hasło'));
  3. ?>


edit:

^^^



Jestes wielki smile.gif dzieki tobie utworzylem statyczna klase registry i teraz nikt nie ma wgladu w dane tak dlugo jak nie zna klucza smile.gif

olbrzymie kudos dla Cibie yahoo.gif

dla zainteresowanych w jaki sposob przechowywac dane poza klasa i pozbycie sie wrednego wgladu przy metodach debugujacych:

  1. <?php
  2. class PMRegistry extends PM
  3. {
  4.    private static $registry = array();
  5.    
  6.    public static function regSet($name, $obj)
  7.    {
  8.        if(isset(self::$registry[$name]))
  9.        {
  10.            throw new Exception();
  11.        }    
  12.        else
  13.        {
  14.            self::$registry[$name] = $obj;
  15.        }
  16.    }
  17.    
  18.    public static function regGet($name)
  19.    {
  20.        if(!isset(self::$registry[$name]))
  21.        {
  22.            throw new Exception();
  23.        }
  24.        else
  25.        {
  26.            return self::$registry[$name];
  27.        }
  28.    }
  29.    
  30.    public static function regDelete($name)
  31.    {
  32.        if(!isset(self::$registry[$name]))
  33.        {
  34.            
  35.        }
  36.        else
  37.        {
  38.            unset(self::$registry[$name]);
  39.        }
  40.        
  41.        return;
  42.    }
  43.    
  44.    public static function regExists($name)
  45.    {
  46.        return isset(self::$registry[$name]);
  47.    }    
  48. }
  49. ?>
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.