Tracy v PHP projektu – jak nastavit skrytí citllivých údajů v dumpech?

m.brecher
Generous Backer | 765
+
0
-

Ahoj,

skrytí přihlašovacích údajů k databázi, popř. osobních dat uživatelů musí být kvalitně zajištěno a to i v dump() výpisech Tracy.

Nette má pro toto řešení a v konfiguraci se nastavuje:

tracy:
	keysToHide: ['password', 'username', ...]

Když mám v projektu jenom PHP a Tracy bez Nette tak předpokládám, že si místo konfigurace budu muset napsat nějaký vlastní kód – pokud to jde.

Neporadil by někdo jak na to, v dokumentaci jsem pátral, ale nic jsem nenašel.

Díky předem.

Marek Bartoš
Nette Blogger | 1178
+
+1
-

\Tracy\Debugger::$keysToHide

m.brecher
Generous Backer | 765
+
0
-

Díky, tak jednoduché?

Editoval m.brecher (22. 3. 2023 19:40)

m.brecher
Generous Backer | 765
+
0
-

@MarekBartoš

Ahoj,

tak jsem to vyzkoušel, citlivé údaje mám v poli $credentials a \Tracy\Debugger::$keysToHide v tomto kódu password neskryje:

Citlivé údaje do databáze mám uloženy takto:

class Config
{
    private array $credentials;

    .....
}
Debugger::$keysToHide[] = ['password'];

......
    bdump(Debugger::$keysToHide)     // ověření, že password je nastaven jako hidden
    bdump($config)                  // vypíše   credentials: array ... 'password' => 'abcdef'

Takhle to skrývání tedy nefunguje a zkoušel jsme to uložit i do property $user. Potřeboval bych nějak Tracy pobídnout, aby $keysToHide aplikovala na třídu Config na propertu $credentials – to asi nepůjde že?

Je nějaká konvence, na jaké třídy/property se Debugger::$keysToHide aplikuje ?

Editoval m.brecher (22. 3. 2023 19:50)

dms
Člen | 87
+
0
-

Kdyť je to vše v dokumentaci zde https://tracy.nette.org/cs/configuring#… Předpokládám že pokud přidáváš do pole tak jenom takto:

Debugger::$keysToHide[] = 'password';
m.brecher
Generous Backer | 765
+
0
-

@dms

Dík za upozornění, to jsem napsal špatně, to ano, ale i když to napíšu syntakticky správně, tak to stejně password neskrývá:

Debugger::$keysToHide[] = 'password';   // password se neskryje
Debugger::$keysToHide = ['password'];   // ani takhle - password se neskryje

Takže to vypadá, že se to dá aplikovat jenom v projektech, kde je Nette a kde jsou vestavěné třídy ve kterých se to použije (User?)

Marek Bartoš
Nette Blogger | 1178
+
0
-

Nainstaluj si phpstan. Dostaň se aspoň na level 5. Nebudeš pak narážet s takovými drobnostmi jako je nesprávný typ.

Btw, od PHP 8.2 https://wiki.php.net/…_back_traces
A od Tracy 2.10 lze použít obdobu v podobě /* sensitive */

Takže to vypadá, že se to dá aplikovat jenom v projektech, kde je Nette

Ne, jen se to nepoužívá pro dump(). Ten se nikdy neukládá, máš ho vykreslený jen když máš zapnutý debug mód. Takže by to ani moc nedávalo smysl.

Editoval Marek Bartoš (22. 3. 2023 20:10)

m.brecher
Generous Backer | 765
+
0
-

@MarekBartoš

Ne, jen se to nepoužívá pro dump(). Ten se nikdy neukládá, máš ho vykreslený jen když máš zapnutý debug mód. Takže by to ani moc nedávalo smysl.

Jak se znám, tak při nějakých problémech na produkci jsem schopen tam nechat zapnutý debug mód. Takže odstranění polí ‚password‘ z dumpů je ochrana před nejhorším a sice malý ale vítaný příspěvek k zabezpečení aplikace.

Nainstaluj si phpstan. Dostaň se aspoň na level 5. Nebudeš pak narážet s takovými drobnostmi jako je nesprávný typ.

Ano, souhlasím.

Marek Bartoš
Nette Blogger | 1178
+
+2
-

Nezapínej debug mód na produkci nikdy pro všechny, přinejmenším přes cookie. Jde to udělat i tak, aby se ti debug zapnul jen pro tebe na kliknutí v administraci https://github.com/…cs/README.md#…