Autor Zpráva
czmarci
Profil *
Dobrý den,

plánuji vytvořit systém který musí být na extrémně bezpečný. V tuto chvíli mám pro přístup do backendu vyřešené:

- SQL injection
- XSS
- Brute force atack (captcha, omezený počet pokusů o přihlášení)
- Heslo je v databázi doplněno o bezpečností klíč (pepper) a hashováno v md5.
- Srovnávají se osolená hesla (sha1 nebo sha256)
- Systém vyžaduje aby heslo mělo velké písmeno, malé písmeno, číslo a minimální počet znaků aby byl 8.
- Omezení přístupu je z IP s české republiky (je v plánu)
- Nemohu nasadit SSL certifikát (sdílený hosting)

navíc po přihlášení bude uživateli e-mailem odeslán unikátní ověřovací kód který bude muset zadat do formuláře jinak se do backendu nedostane (říkáme tomu druhý stupeň ochrany).

Celý backend poběží na jiné doméně než frontend a bude blokován přístup vyhledávacím robotů.

Všechny přístupy se budou ukládat do logu.

Myslíte si že takové zabezpečení je dostatečné pro oblast která bude obsahovat opravdu hodně důvěrné data?
Napadá Vás jaké další bezpečnostní rizika bych měl podchytit?

Děkuji všem :)

PZN: nejsem paranoidní :)
Medvídek
Profil
czmarci:
Myslíte si že takové zabezpečení je dostatečné pro oblast která bude obsahovat opravdu hodně důvěrné data?
Ne, protože:

- Nemohu nasadit SSL certifikát (sdílený hosting)


A tahle podmínka mě všude neuvěřitelně se** :)
Systém vyžaduje aby heslo mělo velké písmeno, malé písmeno, číslo a minimální počet znaků aby byl 8.
Roflmao
Profil *
A co session hijack, clickjacking?
czmarci
Profil *
„Myslíte si že takové zabezpečení je dostatečné pro oblast která bude obsahovat opravdu hodně důvěrné data?“
Ne, protože:


Abych to upřesnil, šifrované spojení zde bude ale certifikát není od uznávané certifikační autority.

A tahle podmínka mě všude neuvěřitelně se** :)
„Systém vyžaduje aby heslo mělo velké písmeno, malé písmeno, číslo a minimální počet znaků aby byl 8.“


Chápu, ale přístup budou mít jen naši správci tak to snad zkousnou :)


Roflmao: session hijack mám vyřešeno, zapomněl jsem uvést (do SESSION bude uložena mimo jiné i IP přihlášeného uživatele, uživatelův OS a to celé bude osolené. SESSION se bude neustále znovu kontrolovat). O clickjacking jsem nevědl, nastuduji si, díky za tip ;)
Medvídek
Profil
czmarci:
Tak mě šlo i o ten sdílený hosting. Nechi tu vythovat takový patlali jako ban.an pana Kaluži, ale pokud se jedná o opravdu důvěrný data, tak bych asi na hosting nešel.
pcmanik
Profil
czmarci:
Ak budete mať istotu použitia php 5.5 a vyššie tak môžete využiť na hashovanie hesiel extenziu password, sama osolí reťazec a v budúcnosti si dokáže automaticky sama zmeniť hashovací algoritmus.
Lamicz
Profil
czmarci:
Můžete použít i potvrzení přes SMS s využitím brány, ale je to už "trochu" extrém :)

Heslo je v databázi doplněno o bezpečností klíč (pepper) a hashováno v md5.
Nedostatečné, existuje SW který s tímto počítá, navíc salt je přímo v DB u každého hashe, v případě úniku DB dat je velké riziko dešifrování. Použijte co navrhuje pcmanik, příp. knihovnu pro starší verze PHP.

Pokud to musí být opravdu tak bezpečné, tak doporučuji svůj server nastaven profíkem (ne apt-get). Na sdíleném serveru může dojít k průniku z úplně cizího webu.
Amunak
Profil
czmarci:
- Heslo je v databázi doplněno o bezpečností klíč (pepper) a hashováno v md5.
- Srovnávají se osolená hesla (sha1 nebo sha256)
Nepoužívej zastaralé md5 ani sha1.

- Systém vyžaduje aby heslo mělo velké písmeno, malé písmeno, číslo a minimální počet znaků aby byl 8.
Tohle může bezpečnost potenciálně snižovat. Minimum osm znaků je v pořádku, ale jinak to neomezuj. Můžeš k tomu napsat, že jediné omezení je osm znaků, ale ať heslo volí bezpečně. Někdo totiž může být zvyklý psát heslo treba frantapepajednicka, a ty ho budeš nutit z toho udělat třeba Franta0.

navíc po přihlášení bude uživateli e-mailem odeslán unikátní ověřovací kód který bude muset zadat do formuláře jinak se do backendu nedostane (říkáme tomu druhý stupeň ochrany).
Pokud možno dejte na výběr mezi tímto, a TOTP standardem. Nemám rád třeba to, co Dělá Steam - pokaždé se přihlašovat na email je dost otravné, plní to schránku bezcennými daty, může se stát, že to přijde do spamu, a pokud se uživatel nepřihlašuje šifrovaně, a je třeba na nějakém veřejném PC, ještě svojí schránku vystaví potenciálnímu útoku. Implementace TOTP je jednoduchá, a to dodatečné číselné heslo se vypočítává, není potřeba přístup k internetu, a pokud se nikdo nedostane k cílovému zařízení, je to bezpečné. Možná dokonce bezpečnější, protože když třeba útočník získá přístup k mailu oběti, a je na ten mail napojené i to posílání unikátního klíče, stačí vyresetovat heslo, a získá přístup. Takhle potřebuje ještě nějaké zařízení (typicky smartphone) oběti. Ale je třeba i aplikace pro windows, která to implementuje, kdyby byl problém s nedostatkem smartphonů :)

Omezení IP adres je možná chytré, ale je pak potřeba počítat s tím, že třeba z dovolené při nějaké kritické situaci se správce nepřihlásí na web.

Pokud jsou přímo na serveru uložena nějaká citlivá data, bylo by doré je šifrovat.

Abych to upřesnil, šifrované spojení zde bude ale certifikát není od uznávané certifikační autority.
Pak ale musíte donutit uživatele, aby přijali váš osobní CA certifikát, protože pokud jen budou odklikávat to varování, může pořád velmi snadno dojít k MitM útoku. Ale je to lepší než nic, odradí to třeba amatéry, co odposlouchávají nešifrované wifi sítě.

Používejte hlavičku Strict-Transport-Security. U hesel bych nejspíš skládal salt jak z něčeho, co je v kódu (klíče), tak nějakého pole v databázi.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: