Mikor nem éri meg automatizálni?

A napokban regisztrálni próbáltam egy oldalra, és egészen véletlenül sikerült így elvennem egy felhasználói fiókot valaki mástól. Konkrétumokat nem mondok, de az történt, hogy az illető már beregisztrált engem erre az oldalra, így a rendszer a nevem és a születési időm alapján azonosított, és nekem adta a fiókot.

Nyilván azonnal felvettem a kapcsolatot az oldal szerkesztőivel, írtam nekik, hogy ez mennyire ciki, hogy egy név és egy születési dátum elég egy fiók feltöréséhez, és hogy tegyenek valamit az oldal biztonságosabbá tétele érdekében. Mint kiderült az ezzel kapcsolatos probléma sokkal bonyolultabb, mint ahogy elsőre tűnik.

A probléma 

 

A cégnek több ügyfele van, és az ügyfelek regisztrálhatnak náluk személyesen és online is, illetve a megfelelő jogosultsággal rendelkező ismerős is beregisztrálhatja őket. A személyes regisztráció körülbelül 30 éve megy, az online pedig jóval kevesebb ideje, így egy csomó olyan ügyfél van, aki még annak idején személyesen regisztrált, és azóta a nevével és a születési dátumával azonosítja magát, illetve jobb esetben a regisztrációkor kapott azonosítóval.

A cég kedvezményeket ad az alapján, hogy milyen a felhasználó története, így üzleti szempontból fontos, hogy a személyesen regisztrált fiókok történetét is belefésülje az online fiókok történetébe a rendszer, és ezek figyelembe vételével történjen az árak megállapítása.

A mostani online rendszer azt csinálja, hogy regisztrációkor elkéri a nevet és születési dátumot, és ha a rendszerben létezik már személyesen regisztrált fiók ilyen adatokkal, akkor átadja ezt a fiókot a regisztrálónak, és engedi, hogy felhasználói nevet és jelszót állítson be rajta, módosítsa az email címet, telefonszámot, és így tovább. Így úgymond aktiválásra kerül a személyesen regisztrált fiók, online fiók lesz belőle, és ezek után már más nem veheti el, csak a felhasználói név és a jelszó ismeretével.

Ezt a rendszert kellene úgy továbbfejleszteni, hogy illetéktelenek ne tudjanak megszerezni fiókokat.

Egy lehetséges megoldás az automatizálásra

 

Némi agyalás után eszembe jutottak érdekes kérdések, amiket a jelenlegi model nem fed le:
 - Mi van akkor, ha két ember azonos névvel született azonos napon? A mostani rendszer csak egy fiókot biztosít ennek a kettő embernek.
 - Mi van akkor, ha valaki nevet változtat akár többször is? Például férjhez megy, és felveszi a férje nevét.
 - Egyáltalán mi történik akkor, ha valaki megszerez egy vagy több ilyen személyesen regisztrált fiókot? Mit tud vele kezdeni?

Nyilván a mostani model ezekre a kérdésekre nem ad kielégítő választ. Hogyan kellene módosítani a modelt, hogy rendesen működjön?

 - A személyesen regisztrált fiókokat a név és születési dátum alapján azonosítjuk, míg az online regisztrált fiókot a felhasználói név alapján. A két azonosítási módszer köszönőviszonyban sincs egymással, így elég egyértelmű, hogy két külön entitásról van szó, amit a modelnek is tükröznie kellene, pl: OfflineAccount, OnlineAccount domain objectekkel.
 - A két fiók típust az aktiváció során tudjuk összekötni, tehát az online fiók az aktiváció előtt nem szabad, hogy részesüljön a személyesen regisztrált fiók kedvezményeiben. Az aktiváció úgy zajlik, hogy a felhasználó megadja az online fiók azonosítóit (felhasználói név és jelszó) és a személyesen regisztrált fiók azonosítóit (név és születési dátum). A két azonosító csomag alapján a rendszer összepárosítja a fiókokat. Érdemesebb személyesen vagy telefonon végezni az aktivációt, és további adatokat bekérni, pl. a fiók történetről, vagy a személyesen megadott egyéb adatokról, így biztosítható, hogy a személyesen regisztrált fiók az adott felhasználóhoz tartozik.
 - A személyesen regisztrált fiókok és az online fiókok között nem áll fenn az 1:1 reláció. Ha valaki nevet változtat, akkor máris 2 személyesen regisztrált fiók fog hozzá tartozni. Ergo az aktiváció során lehetőséget kell adni a felhasználónak több személyesen regisztrált fiók csatolására.
 - A név és születési dátum egyezést szintén csak személyesen lehet feloldani, ha a személyesen regisztrált fiók történetéből csak azokat a részeket kötjük az online fiókhoz, ami tényleg ahhoz tartozik, a maradéknek pedig létrehozunk egy új személyesen regisztrált fiókot. Mivel a név és a születési dátum még mindig ezeknek a fiókoknak az azonosítói, ezért jobb, ha ilyenkor az aktivált rész megsemmisül, és a fiók történet az online fiókba átírásra kerül.
 - Összességében is jobb, ha az aktiválás során a személyesen regisztrált fiókok története összeolvad az online regisztrált fiókok történetével, és a személyesen regisztrált fiók megsemmisül. Így ezek a fiókok szépen kivezethetőek a rendszerből, ha személyesen végzett üzletnél kötelezzük a felhasználókat, hogy online fiókot hozzanak létre, vagy az online regisztrált fiókukat használják. Ehhez szükség lehet informatikai rendszer kiépítésére.

Miért nem jó ez a megoldás?

 

Mint az oldal szerkesztőitől megtudtam, a következőek a mostani válaszok a fenti kérdésekre:

 - Mi van akkor, ha két ember azonos névvel született azonos napon? Az egyik be tud regisztrálni, a másik személyesen reklamál, hogy nem tud online regisztrálni. Ilyenkor létrehoznak neki egy online accountot. Ebből körülbelül évente kettő van.
 - Mi van akkor, ha valaki nevet változtat akár többször is? Amint az illető szembesül vele, hogy nem kapja meg a kedvezményeket, reklamál, és elintézik neki. Ilyenből sincs túl sok, évi néhány tucat.
 - Egyáltalán mi történik akkor, ha valaki megszerez egy vagy több ilyen személyesen regisztrált fiókot? A személyes adatok megszerzésén túl, amiket nagyrészt már ő is tudott, nem igazán tud mit csinálni a fiókkal az illető. Az online fiókhoz tartozhat valamennyi egyenleg, de a személyesen regisztrált fiókokra ez nem jellemző. Így ezekkel nem igazán tudnak mit csinálni.

Összességében tehát a mostani rendszer hibáinak mellékhatása sokkal kisebb, mint az automatizált megoldásunk költsége lenne, és nagy valószínűséggel hosszú távon sem érné meg a cégnek a fejlesztés. Ezek alapján egyáltalán nem javasolt, hogy a megoldásban vázolt módosításokat végrehajtsák.

Mit tanultunk ebből?

 

Ami számomra kimondottan érdekes volt ezzel a problémával kapcsolatban, hogy a folyamat optimalizálás mennyire kihatott a domain model-re és a biztonsági kérdésekre. Programozóként hajlamosak vagyunk elfelejteni, hogy általában egy folyamatot automatizálunk részben vagy egészben, és hogy az üzleti tevékenység szempontjából sokkal fontosabb, hogy ez a folyamat optimális legyen (költséget vagy ráfordított időt/energiát minimalizáljunk), mint az, hogy tökéletes modelt csináljunk és tökéletesen biztonságos kódot írjunk. Szóval a folyamat optimalizálás akár még biztonsági kérdéseket is felülírhat.

Nyilván ha valami nagy biztonsági hibát találunk, aminek komoly a hatása a cég tevékenységére, akkor azt muszáj javítani, mert hosszú távon nagy a költsége, ha a hackerek kihasználják a sebezhetőséget. Tehát a folyamat hosszú távon kevésbé optimális ebben az esetben, mintha fizetünk valamennyit a javításért. Itt azért már vastagon belecsúszhatunk a kockázatelemzés témakörébe is, szóval lehet ezt még tovább fokozni. :-)

Nincsenek megjegyzések:

Megjegyzés küldése