Sparround

Fintech praktikaları: sessiya, sensitive data, compliance

Bank tətbiqini adi tətbiqdən ayıran gündəlik mühəndislik vərdişləri:

Sessiya idarəetməsi:

  • Qısa access token + refresh rotation; server tərəfdə sessiyaların siyahısı və uzaqdan ləğv
  • Inactivity timeout — hərəkətsizlikdə avtomatik kilid (lifecycle observer ilə)
  • Arxa plana keçəndə həssas ekranın gizlədilməsi; qayıdışda PIN/biometrika

Sensitive data lifecycle:

  • Loglara heç vaxt: PAN, CVV, token, şifrə, balans — release-də log siyasəti + lint qaydaları
  • Analytics/crash hesabatlarına PII düşməməsi (Crashlytics custom key-lərinin auditi)
  • Klipbord: kart nömrəsi kopyalananda ClipDescription.EXTRA_IS_SENSITIVE və vaxtla təmizləmə
  • Ekran görüntülərində maskalama; klaviatura cache-i üçün importantForAutofill/inputType seçimi

Compliance təfəkkürü:

  • PCI DSS — kart datası: mobil cihaz untrusted sayılır → tam PAN/CVV saxlanmır, tokenization
  • PSD2/SCA (Avropa) — strong customer authentication: iki faktor, dynamic linking (təsdiq mesajında məbləğ+alıcı)
  • Audit trail — kritik əməliyyatların server tərəfdə izlənməsi; cihaz tərəfdə də hadisə jurnalı
  • Pen-test və audit dövrləri — release prosesinin hissəsi
kotlin
class SessionGuard(
    private val lockScreen: () -> Unit
) : DefaultLifecycleObserver {

    private var backgroundedAt: Long = 0

    override fun onStop(owner: LifecycleOwner) {
        backgroundedAt = SystemClock.elapsedRealtime()
    }

    override fun onStart(owner: LifecycleOwner) {
        val away = SystemClock.elapsedRealtime() - backgroundedAt
        if (backgroundedAt > 0 && away > LOCK_AFTER_MS) {
            lockScreen()               // PIN/biometrika ekranı
        }
    }

    companion object { const val LOCK_AFTER_MS = 60_000L }
}

// Kart nömrəsinin təhlükəsiz kopyalanması
fun copyCardNumber(context: Context, masked: String) {
    val clip = ClipData.newPlainText("card", masked).apply {
        description.extras = PersistableBundle().apply {
            putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)  // önizləmədə gizli
        }
    }
    context.getSystemService<ClipboardManager>()?.setPrimaryClip(clip)
}

Sessiya kilidi: hərəkətsizlik + arxa plan

Müsahibədə fintech düşüncəsini göstərən cümlələr: "Client-ə heç vaxt etibar etmirik — limit yoxlaması UI-da rahatlıq, serverdə qayda-dır"; "Hər kritik əməliyyat idempotency key ilə gedir — şəbəkə retry-ı double-charge yaratmır"; "Feature flag-lərlə riskli funksionallığı tədricən açırıq"; "Release-dən əvvəl təhlükəsizlik checklist-i: log audit, screenshot testi, backup yoxlaması". Bu səviyyə detallar texniki biliyi biznes riskinə bağlayır — bank müsahibəsində ən çox qiymətləndirilən bacarıq.

🛠 Tapşırıq

Öz (və ya nümunə) tətbiqin üzərində mini audit apar:

  • Log çağırışlarını qrep et: token, kart, balans loglanırmı? Release-də logging-i söndür/redaksiya et.
  • Sessiya kilidi əlavə et: 60 saniyə arxa planda qalandan sonra PIN ekranı.
  • Kart nömrəsini EXTRA_IS_SENSITIVE ilə kopyala və klipbord önizləməsinə bax.
  • Crashlytics custom key-lərini nəzərdən keçir — PII varmı?

Bitdi sayılır: 5 bəndlik tapıntı siyahısı və hər biri üçün düzəliş yazmısansa.

📚 Mənbələr və sənədlər