petarmiketa :: project

Secure Login CLI

Python CLI koji demonstrira obrambenu autentikaciju: bcrypt hashiranje lozinke, brojanje neuspješnih pokušaja, privremeni lockout i audit logiranje.

Python bcrypt Authentication Defensive security

Features

Defensive Auth
  • CLI register/loginmenu flow
  • bcrypt hashsalted
  • fail counterper user
  • lockout5 fail / 10 min
  • audit logevents

Files

JSON storage
  • users.jsonbcrypt hashes
  • attempts.jsonfails + lock_until
  • auth.logaudit trail

Kako koristiti (brzo)

Pokreni aplikaciju iz foldera projekta:

python main.py
# 1) Register -> kreira korisnika (bcrypt hash)
# 2) Login    -> provjera lozinke + fail counter + lockout

Writeup

Teorijska pozadina

Autentikacijski sustavi su temeljna komponenta modernih aplikacija: provjeravaju identitet korisnika i štite račune od neovlaštenog pristupa. Budući da su login endpointi javno izloženi, često su meta brute-force i credential-guessing napada. Bez obrambenih kontrola napadač može ponavljati pokušaje dok ne pogodi vjerodajnice.

Sigurna autentikacija zato nije samo “provjeri lozinku”, nego i: ograničavanje zloupotrebe (rate/lockout) i vidljivost aktivnosti kroz logove.

Secure Login CLI demo
CLI Demonstration: registracija, uspješna prijava te uzastopni failovi koji završavaju lockoutom.

Pohrana lozinki

Spremanje lozinki u plaintextu je ozbiljan rizik: kompromitacija baze odmah otkriva sve vjerodajnice. Zato se koriste funkcije za hashiranje lozinki dizajnirane baš za tu svrhu.

U ovom projektu lozinke se spremaju kao bcrypt hash s automatski generiranim saltom. Time identične lozinke ne daju isti hash, a brute-force postaje znatno skuplji (sporije i teže za napadača).

users.json password storage
Password Storage: users.json sadrži samo bcrypt hash — nema plaintext lozinki.

Neuspješni pokušaji prevare

Ponavljani neuspješni pokušaji često su indikator brute-force aktivnosti. Povremena pogreška je normalna, ali veliki broj uzastopnih failova nad istim računom izgleda sumnjivo.

Projekt vodi brojač neuspješnih pokušaja po korisniku i drži ga odvojeno od autentikacijskih podataka. To je bitno jer želiš pratiti ponašanje (attempts) bez miješanja sa storageom lozinki (users).

Strategija zaključavanja računa

Kako bi se ograničila učinkovitost napada pogađanjem lozinke, implementirana je jednostavna lockout politika:

  • svaki neuspješan pokušaj povećava brojač
  • nakon 5 uzastopnih failova račun se zaključava
  • zaključavanje traje 10 minuta

Ovo dramatično usporava brute-force i daje ti vrijeme za reakciju (logovi/monitoring), a i dalje je jednostavno za razumjeti i održavati.

attempts.json lockout state
Failed Attempts & Lockout State: attempts.json sprema broj failova i lock_until vrijeme.

Revizijsko bilježenje

Bez logova je teško otkriti sumnjivo ponašanje ili istražiti incident. Zato se svi događaji autentikacije zapisuju u audit log.

Svaki zapis uključuje:

  • timestamp
  • tip događaja (registration/login)
  • korisničko ime
  • ishod (success/fail/locked)
  • razlog neuspjeha kada postoji

Dizajn pohrane podataka

JSON datoteke su korištene da implementacija ostane transparentna i edukativna. U produkciji bi se ovo spremalo u sigurnu bazu i dodatno zaštitilo (permissions, encryption at rest, rotation, monitoring).

Zaključak

Projekt demonstrira temeljne obrambene mehanizme autentikacije: bcrypt pohranu lozinki, detekciju ponovljenih failova, privremeni lockout i audit logiranje. Dobar je temelj za nadogradnju (rate limiting, MFA, alerting, SIEM integracija).