nette databáza – bezpečnosť

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Takeshi
Člen | 596
+
0
-

Ahojte,

keď chcem vytvoriť web-stránku nejakej firme, kde bude mať databázu klientov, tak ma napadla otázka, či je to bezpečné. Pretože by bolo dobre vedieť, ako to je zabezpečené a aká je šanca, že sa tam niekto nabúra. Ďakujem za odpovede.

Tomáš Kolinger
Člen | 136
+
0
-

To záleží jak to napíšeš :). Pokud budeš podávat dotazy správně a dodržovat co se dodržovat má, tak se šance blíží k nule.

Nette jako takové bezpečností díry nemá a snaží se ti co nejvíce pomoci ale i tak se dá bezpečnostní díra vytvořit… Klasický příklad je skládání dotazu pomocí stringu ->query('SELECT * FROM table WHERE id = ' . $id) místo správného ->query('SELECT * FROM table WHERE id = ?', $id)

Editoval Tomáš Kolinger (15. 3. 2014 19:46)

Takeshi
Člen | 596
+
0
-

Tomáš Kolinger napsal(a):

No ja nepoužívam query an prácu s db. Ale napríklad
$this->database->table(‚users‘);
$this->database->table(‚users‘)->insert($data);

… a podobne …

Patrik Votoček
Člen | 2221
+
0
-

Pokud požíváš Nette Database pouze takto tak by jsi tím měl zabránit SQLi. Nicméně je to jenom jedna část bezpečnosti. Je ještě spousta dalších věcí které si musíš pohlídat.

Takeshi
Člen | 596
+
0
-

Patrik Votoček napsal(a):

Pokud požíváš Nette Database pouze takto tak by jsi tím měl zabránit SQLi. Nicméně je to jenom jedna část bezpečnosti. Je ještě spousta dalších věcí které si musíš pohlídat.

a to sú aké veci?

Tomáš Kolinger
Člen | 136
+
0
-

Tak to je fuk co používáš i v tvém případě se dá udělat chyba ->where('id = ' . $id) místo ->where('id', $id).

Další věc která by tě mohla zajímat je XSS, tj. vložení nějakého škodlivého HTML kódu např. přes formulář do databáze, který pak na stránce vypíšeš a spustí se u uživatele… Klasický využití je vložit do stránky JS, pomocí kterého uživateli ukradneš session id a tím dočasně i jeho identitu. To ale zase Nette řeší a pokud escapování vysloveně nevypneš, tak se nikomu útok nepodaří.

Samozřejmě nesmíš udělat nějakej logickej fail, že např. zapomeneš kontrolovat oprávnění a uživatel si obstará tvojí databázi pomocí tvého UI.