Black friday Black friday
Aprílový black friday tě nenechá v klidu! Až 80 % prémiového obsahu zdarma. Více informací
Pouze tento týden slevy až 80 % na programování v Javě

Diskuze: Symfony / Doctrine - šifrování databáze, AES_ENCRYPT

PHP PHP Symfony / Doctrine - šifrování databáze, AES_ENCRYPT American English version English version

Aktivity (1)
Avatar
Andree Pyro
Redaktor
Avatar
Andree Pyro:21.10.2018 13:51

Ahoj, je v Symfony nějaká možnost jednoduše zašifrovat data pomocí klíče před vložením do databáze? Jednoduše, aby byla data v databázi zašifrována. Například přidáním @Encrypt k proměnné v modelu

/**
     * @var string Jméno uživatele.
     * @ORM\Column(type="string", length=255)
     */
    private $firstname;

Zkusil jsem: Našel jsem mnoho různých frameworků. Vytvořil jsem si i šifrování vlastní, ale to zbytečně zpomaluje server.

Chci docílit: Rád bych se vyhnul použitím dalších frameworků. Zajímá mne, zda tato funkce v Symfony existuje. Něco jako

AES_ENCRYPT(str, key_str);

v MySQL. Posílání klíče přímo do databáze problém není, protože je na stejném serveru.

Díky! :)

Odpovědět 21.10.2018 13:51
Boj sa tých, ktorí sú ticho. Oni sú totiž tí jediní, ktorí skutočne myslia.
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Andree Pyro
Jirka Jr:21.10.2018 16:45

koukám, že šifrování celé databáze má mysql až v placené verzi ...

Symfony ... tady píšou o nějakém bundle i o zádrhelích
https://stackoverflow.com/…crypt-column

tady je další bundle:

https://github.com/…rine-encrypt

a budou asi i další ... osobně nemám zkušenost ani s jedním

php má modul mcrypt .... pokud budes sifrovat jen jeden sloupec, tak staci

viz: https://www.bing.com/search?…

další možnost může být použití PostgreSQL, ježto by měla šifrovat zadarmo, co vím a doctrine pro ní má modul

Editováno 21.10.2018 16:48
 
Nahoru Odpovědět 21.10.2018 16:45
Avatar
Andree Pyro
Redaktor
Avatar
Odpovídá na Jirka Jr
Andree Pyro:21.10.2018 16:57

Přesně ten článek o Symfony jsem četl a o moc moudřejší z toho nejsem. Všude se odkazuje na frameworky a mnohdy se ještě zpochybňuje jejich funkčnost. Není nějaká jednoduchá možnost, jak šifrování nastavit, ať už přímo v Symfony nebo MySql?

Nahoru Odpovědět 21.10.2018 16:57
Boj sa tých, ktorí sú ticho. Oni sú totiž tí jediní, ktorí skutočne myslia.
Avatar
Odpovídá na Andree Pyro
Uživatel sítě :21.10.2018 18:06

Mcrypt je dobré nasměrování jak praví Jirka Jr, ale bohužel zastaralé.

Místo toho by ti mělo bohatě stačit: http://php.net/…-encrypt.php

Nahoru Odpovědět 21.10.2018 18:06
Chybami se člověk učí, běžte se učit jinam!
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Andree Pyro
Jirka Jr:21.10.2018 19:17

na úrovni databázového stroje:

jo, sorry, ještě jsem zapoměl na existenci mariadb, což jest fork mysql

ta by měla mít šifrování zadarmo na úrovni tabulek nebo tak nějak

https://mariadb.com/…-encryption/

na úrovni symfony:

"Všude se odkazuje na frameworky a mnohdy se ještě zpochybňuje jejich funkčnost" .... tak to ve světě opensource chodí .... komu se to vyplatí, zaplatí si podporu ... ostatní se vrtaj ve staženém kódu sami a po nějaké době praxe se nechají na tuto činnost najmout :-)

vyzkoušej ty dva bundly na nějakých dummy datech, jak to bude nebo nebude fungovat podle tvych predstav, případně se mrkni do kódu toho bundlu a sám uvidíš ...

taky se kolikrát orientuju podle toho, jak moc je o ten bundle zájem a jak aktivní je vývoj ... na githubu je to vidět v grafech, případně bugy a jejich fixy v issues, historie verzi, pochopitelnost dokumentace a tak

na úrovni db dotazů:

jinak bacha, pokud chceš šifrovat data vlastními silami a ne transparentně databázovým enginem, tak se připrav na to, že nemůžeš udělat

SELECT jmeno, prijmeni, ulice, mesto WHERE mesto LIKE 'Praha%'

minimalne v tom WHERE musi byt

WHERE AES_DECRYPT(mesto, klic) LIKE 'Praha%'

takže si dobře rozmysli, co skutečně je tajné a musí bejt nutně zašifrovaný a ostatní nech radsi plaintext

a taky tu vidis, ze zapracovat neco takoveho do frameworku Doctrine, aby se vsude (de)sifrovalo, kdekoli se s tim sloupcem pracuje (podminky, joiny, group by a tak), neni jen tak to zasifrovat a hotovo

Editováno 21.10.2018 19:18
 
Nahoru Odpovědět 21.10.2018 19:17
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Andree Pyro
Jirka Jr:21.10.2018 19:42

jo ještě ...

vypada to, ze vsechny ty bundly jen zasifruji pred ulozenim a desifruji po vyselectovani ... žádná plnohodnotná transparentní práce se sloupcem .... otazka je, jestli by to vubec slo stoprocentne naimplementovat do vsech featur Doctrine a kolik by to dalo prace

takze pokud chces sifrovat vsechno, tak urcite transparentne na administrativni urovni mariadb

a pokud jen treba heslo a rodne cislo uzivatele v tabulce users, tak nejaky z tehle bundlu

https://packagist.org/…crypt-bundle

tady pisou, ze je podporovan jen Laravel ... tomu moc nerozumim ... myslim, ze by to melo byt jedno, kdyz je to na urovni doctrine
https://github.com/…rine-encrypt

https://github.com/…rine-encrypt

pripadne se muzes vykaslat na ORM frameworky a vyrabet si sql dotazy sam a pouzivat AES_ENCRYPT/DECRYPT

 
Nahoru Odpovědět 21.10.2018 19:42
Avatar
Andree Pyro
Redaktor
Avatar
Odpovídá na Jirka Jr
Andree Pyro:22.10.2018 17:48

Popravdě jsem z toho celého zmatený. Navíc jsem právě zjistil, že vlastně používám celou dobu MariaDb a nikoliv MySql :D

Sepíšu si to:

Šifrování před zápisem nebo po čtení dat z databáze nepoužiji. Při větším množství by šlo o časově náročné operace. Navíc bych při psaní kódu mohl vytvořit mnoho potenciálních rizik.

Na úrovni db dotazů také ne. Resp. ne nyní :D Musel bych se v Symfony dost vrtat, a i když nepochybuji o tom, že by mi to dalo mnoho, aktuálně hledám rychlé a funkční řešení. Možná nakonec zkusím stáhnout framework. Psát vlastní dotazy se mi už kvůli sql injection a zas další práci také moc nechce.

Každopádně jsem právě našel MyDiamo, což vypadá jako velmi solidní nástroj. Až se zas dostanu k pc, zkusím implementovat a napíšu výsledek :)

Nahoru Odpovědět 22.10.2018 17:48
Boj sa tých, ktorí sú ticho. Oni sú totiž tí jediní, ktorí skutočne myslia.
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Andree Pyro
Jirka Jr:23.10.2018 16:05

To Mydiamo vypadá zajímavě, o to víc, že to valí na různých databázových platformách

 
Nahoru Odpovědět 23.10.2018 16:05
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.