LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> PHP (45) - Jsou data v databázi v bezpečí?

Zafilozofujme trochu na téma bezpečnosti dat aneb trocha paranoi nikdy neuškodí.

8.9.2004 15:00 | Petr Zajíc | Články autora | přečteno 41795×

Komerční sdělení: Pořádáme Kurzy PHP

Dejme tomu, že po přečtení dvou předchozích dílů už máme představu o tom, jak naši aplikaci zrychlit. Je ale obecně uložení dat v databázi bezpečné? Jak uvidíme v dnešním víceméně teoretickém článku, něco málo pro to můžeme udělat. Základní otázky databázové bezpečnosti si rozdělíme na "kdo", "kde" a "co".

Kdo může do databáze

MySQL má originální mechanismus přidělování práv. Lze určit kdo a odkud se smí k databázi připojit, a pro každou kombinaci uživatele a místa z něhož se připojuje lze nastavit určitá oprávnění, respektive omezení. To byla ta dobrá zpráva. Špatné zprávy jsou, že:

  • Většinou nebudete mít oprávnění nastavovat oprávnění ;-)) protože to bude dělat správce serveru
  • Většinou nebudete mít oprávnění připojovat se ke své databázi z libovolného místa na internetu. To je rozumné, protože komunikaci mezi Vámi a databází by mohl někdo odposlouchávat.

Z hlediska PHP se dělá někdy chyba - poměrně častý způsob uložení přihlašovacích informací (název hostitele, jméno, heslo) je umístit je do souboru, který se bude do výsledného skriptu vkládat pomocí include, resp. require. To samo o sobě není nebezpečné. Co je ale opravdu špatný nápad - ukládat soubory s jinou příponou než php. Jak například víte, že server nepošle soubory s příponou inc přímo do prohlížeče a někdo si nebude moci Vaše přihlašovací údaje přečíst?

Není heslo jako heslo

Aby nedocházelo k matení pojmů, dodejme rovnou, že uživatelé Vašich stránek samozřejmě nebudou muset znát Vaše přihlašovací údaje k databázi. Uživatelé se možná ověří pomocí nějakého mechanizmu (ten budete muset napsat!) a PHP pak vytvoří databázové spojení (klidně i několik) stále se stejnými přihlašovacími údaji. Takže budete-li mít webový obchod s registrovanými uživateli "Pepa" a "Jarda", bude typický scénář práce následující:

  • Uživatel "Pepa" se nějak ověří (třeba heslem) a vytvoří se pro něj databázové spojení
  • Uživatel "Pepa" pracuje s databází. Databáze neví, že je to "Pepa". Bylo jí prostě řečeno, že ten člověk má správné přihlašovací údaje, tak s ním "mluví".
  • Mezitím se přihlásí "Jarda". Klidně s jiným heslem.
  • Nyní pracují oba s databází. Databáze neví, že to jsou dva různí uživatelé, a i kdyby to věděla, je jí to srdečně jedno.
  • V nějaké chvíli se jeden a později druhý uživatel odhlásí.

Vrstva, ve které musíte uživatele rozlišit tedy není MySQL, ale PHP. Zda a jak vyřešíte přihlašování je zcela ve Vašich rukou. Může to být provedeno bezpečně, nebo to může být "děravé" jako ementál.

Pozn.: O těchto věcech ještě bude v seriálu řeč.

Kde mít databázi

Ani tohle většinou nebudete moci ovlivnit. V naprosté většině případů bude databáze ležet někde u providera a tudíž nebudete moci účinně kontrolovat, kdo a kdy z ní četl vaše data. Jiná možnost je mít vlastní databázový a/nebo webový server, což může být nákladné a technicky náročné. Poskytovatel z vašich peněz žije, takže je zřejmě ten poslední, kdo by chtěl zpronevěřit vaše data. Dojde-li k prozrazení dat z datábáze uložené u webhostera, je to prakticky vždy způsobeno útokem zvenčí, málokdy zevnitř.

Pozn.: Což je sice objektivní, nikoli však uklidňující tvrzení. Jestliže si provider neumí zabezpečit server proti útoku na databázi, je potřeba ho nemilosrdně vyměnit.

Když běží databáze na jiném stroji než webový server musí spolu pochopitelně komunikovat. V takovém případě byste měli vědět, že:

  • Přihlašovací informace si MySQL server s PHP bude vyměňovat šifrovaně,
  • vlastní data si bude vyměňovat komprimovaně, ale nešifrovaně.

V takovém případě by tedy kdokoli mezi databázovým a webovým serverem mohl data odposlouchávat. Řešením je v tomto případě zabezpečit přenos dat. To už je mimo náplň našeho seriálu, ale v případě vzdálené komunikace mezi MySQL a webovým serverem je to téměř nezbytné.

Co mít v databázi?

To je na první pohlad divná otázka. V databázi přece musíme mít ty věci, které tam potřebujeme mít, ne? Ne tak docela. Některé věci se do databáze mohou ukládat tak, aby to případnému zloději dat nic neříkalo. Například chceme-li ukládat citlivé informace (hesla...) můžeme použít funkci MD5. Příkaz:

SELECT MD5('petr')

vrátí nějaký řetězec, který případnému útočníkovi nic neřekne. Šifrovacích a souvisejících funkcí podporuje MySQL celou řadu. Pozor, některé jsou obousměnrné, některé jednosměrné.

Samozřejmě nezvítězíte, pokud se rozhodnete v databázi zašifrovat kdejakou informaci. Pamatujte, že šifrování způsobí následující problémy:

  • Budete potřebovat více místa v databázi, protože šifrovaná data jsou většinou delší než nešifrovaná.
  • Budete potřebovat větší výpočetní výkon - například databáze bude muset data dešifrovat a teprve potom řadit.
  • Jestliže se někdo nepovolaný dostane jak k vaší databázi, tak k PHP skriptům, je obyčejně každé zabezpeční téměř jistě prolomeno. Výjimkou mohou být situace, kdy data závisí kromě údajů v samotných php souborech ještě na něčem (třeba: informace potřebné k dešifrování jsou umístěna v úložišti, které útočník neprolomil).

Článku chybí nějaká praktická ukázka. Pakliže uložíte databázi následující příkaz:

SELECT AES_ENCRYPT("Super tajná informace","super tajný klíč")

uvidíte ve výsledku jen "rozsypaný čaj". Pokud zvolíte obrácený postup, dostanete opět Vaši super tajnou informaci:

AES_DECRYPT(
AES_ENCRYPT( "Super tajná informace", "super tajný klíč"),
"super tajný klíč")

Jestliže se "super tajný klíč" bude nacházet mimo php skripty a případný útočník jej nebude mít k dispozici, máte skoro vyhráno. Protože prolomení šifer tohoto typu je velmi obtížné.

Pozn.: Informace uložené pomocí šifrovacích funkcí budete muset ukládat v polích pro binární data a ne v polích pro řetězce. To proto, že výsledkem jsou binární (ne tedy textová) data.

Šifrování v PHP

Aby to PHP nebylo líto, dodejme, že i bez pomoci MySQL umí samotné PHP informace (de)šifrovat. Pokud je to nastaveno, podporuje PHP poměrně rozsáhlou škálu  šifrovacích algoritmů. Některé funkce (například md5()) jsou k dispozici již v "základní výbavě" PHP. Nikdo Vám tedy nebrání ukládat šifrovaná data do souborů nebo posílat je pomocí e-mailů a všechno to dělat pomocí PHP.

Příště se zaměříme na veskrze praktické téma - budeme uvažovat nad tím, jak do MySQL databáze nahrát data ze vzdálených zdrojů.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

15.5.2017 23:50 /František Kučera

Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).


Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

15.6.2017 9:34 / Ondřej Havlas
php,

10.6.2017 10:39 / Temple
sell home for cash

11.5.2017 23:32 / lelo
Re: Problém se správcem balíčků

11.5.2017 5:45 / davd mašek
Re: Problém se správcem balíčků

10.5.2017 22:54 / lelo
Re: Problém se správcem balíčků

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze