WebKiv: ZabezpecenePrihlaseni |
from Wiki KIVu |
Design pro zabezpečené přihlášení do OpenCms s ověřením proti Kerberos ZČU:
Z důvodu použití Apache + Tomcat na beta.kiv.zcu.cz, kde:
/opencms/
request.isSecure()
nelze použít řešení s validací.
Nasazeno bylo pouze:
login_element_secure.jsp
bylo zabezpečeno Apachem.
Instalace na ManualModulLogin - Jednoduché řešení.
Cíl: Zabezpečení přihlášení a lepší kontrolu uživatele než přes kontrolu IP (OpenCms interně).
1. zabezpečená přihlašovací stránka do worklace (HTTPS)
2. zabezpečená práce ve workplace
3. zabezpečená přihlašovací stránka na frontendu (odhlášení nebude zabezpečené)
4. login form pro frontend
5. ověření pravosti přihlášeného uživatele pracujícího přes HTTP (rozpoznání zloděje session)
Viz též původní náčrty: Attach:kiv-secure-auth-proces.jpg obrázek - červeně jsou označeny stránky-cookies které jsou secure čili na HTTPS. Attach:opencms-zabezpeceni-frontend.jpg - jak má fungovat zabezpečení při přístupu k frontend obsahu, včetně periodického ověřování autenticity uživatele
K celému se přidá Kerberos autentizace.
Termíny:
Pro zabezpečení práce ve workplace včetně přihlášení je třeba nastavit v
%OPENCMS%/WEB-INF/web.xml
:
<security-constraint> <web-resource-collection> <web-resource-name>SecureWorkplace</web-resource-name> <url-pattern>/opencms/system/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
Dojde k vynucení HTTPS u stránek ležících v /opencms/system/*
a podadresářích. Zabezpečí se tedy přihlašovací formulář do workplace (/opencms/system/login) a samotné stránky workplace (/opencms/system/wrkplace).
Pro účely zabezpečeného přihlášení byl upraven modul org.opencms.welcome z OpenCms 6.2.3.
Obsahuje v adresáři /elements
soubory login_element.jsp
a login_element_secure.jsp
.
login_element.jsp
se umístí do template (na HTTP)
login_element_secure.jsp
- přihlašovací formulář na HTTPS - přesměrování zařídí sám, nebo je možno nastavit ve web.xml
stejně jako zabezpečení workplace
Pokud potřebuji zabezpečit nějakou operaci (formulář atd.) musí se přejít na HTTPS.
Body 3. a 4. potřebují pro správnou funkčnost sdílení session mezi HTTPS a HTTP.
Problém je následující:
Po analýze problému se nabízí řešení, které pomáhá i k řešení bodu 5.
Po přihlášení na zebezpečené stránce by byla session cookie poslána jako secure. Tento stav je nežádoucí kvůlí sdílení session s HTTP. Nutný je tedy zásah do CmsJspLoginBean
OpenCms, která je zodpovědná za přihlašování.
Provedeme několik úprav:
Takto je zaručeno sdílení session po přihlášení na HTTPS a případném přechodu na HTTP. Máme taktéž označeného pravého uživatele
Ověření pravosti uživatele se bude dít přes servlet filtr ValidateAuthFilter
. Filtr se nastaví, viz ManualModulLogin tak, aby kontroloval veškerou komunikaci.
Parametry filtru jsou:
Filtr se chová několika způsoby:
A. Jsme-li nepřihlášeni, propouští komunikaci dále.
B.
Pokud jsme na nezabezpečeném HTTP, počítá při každém požadavku čas od přihlášení. Uplyne-li doba delší než delta t
a je-li náš požadavek GET
, začne validační smyčka:
login_element_secure.jsp
)
login_element.jsp
, pokud by se znovu snažil přistoupit s ukradenou session cookie - vyběhne ihned hlášení
login_element.jsp
- hlášení o ukradené session; uložení času validace; přechod zpět na HTTP
C. Pokud sami přejdeme na HTTPS, je validován každý náš požadavek (GET, POST). Zůstáváme na HTTPS. Neukládá se čas validace pro případ krádeže session cookie a přístup útočníka na HTTP (bude zachycen filtrem - vyprší čas, na HTTPS by byl zachycen okamžitě). Při neúspěšné validaci se posílá 403 Forbidden.
Instalace na ManualModulLogin - Kompletní řešení.
Zpět na RedSys